RpcWinSetYieldInfo
The RpcWinSetYieldInfo
function configures Microsoft Windows 3.x client applications to yield to other
applications during remote procedure calls.
Note This function
is only available for 16-bit Windows client applications. A 32-bit application
should take advantage of the preemptive multitasking and multithreading support
that the 32-bit Windows operating systems provide.
#include <rpc.h>
RPC_STATUS
RpcWinSetYieldInfo(
HWND
hWnd, |
|
BOOL
fCustomYield, |
|
WORD
wMsg, |
|
DWORD
dwOtherInfo |
|
); |
|
Parameters
hWnd
Identifies
the application window that receives messages relating to yielding.
Applications should usually specify the parent window of the dialog box.
Standard
yield applications receive messages for both the start and end of the yield
period. Custom yield applications receive messages that indicate when the RPC
operation has completed.
fCustomYield
Specifies the
yielding method. The following values are defined:
Value |
Yield
method |
TRUE |
Custom
yield |
FALSE |
Standard
yield |
wMsg
Specifies the
message that is posted by the RPC run-time library to notify the application of
RPC events. The message value should be in the range beginning with WM_USER. If
a zero value is specified, no message is posted.
For
standard-yield applications, the message indicates the beginning or end of the
yield period. This allows the application to refrain from performing operations
that are illegal during an RPC operation. Standard-yield applications use the
following values of wParam and lParam with this message:
Parameter |
Value |
Description |
wParam |
1 |
Yield
period beginning |
wParam |
0 |
Yield
period ending |
lParam |
- |
Unused |
For a
custom-yield application, the wMsg message notifies the application that
the RPC operation is complete. When the application receives this message, it
should immediately return control to the RPC run-time library by having the
callback function return. The values of wParam and lParam are set
to zero and are not used.
dwOtherInfo
Specifies
additional information about the yielding behavior.
For
standard-yield applications, dwOtherInfo contains an optional HANDLE
to an application-supplied dialog-box resource. This handle is passed as the
second parameter to the DialogBoxIndirect function. If the handle
specified by dwOtherInfo is zero, the default dialog box supplied by the
RPC run-time library is used. For more informatin about DialogBoxIndirect,
see your Windows API reference documentation.
For
custom-yield applications, dwOtherInfo contains the procedure-instance
address of the application-supplied callback function.
Remarks
The RpcWinSetYieldInfo
function supports two yielding methods:
Standard yield method. The RPC
run-time library provides a standard modal dialog box that includes a single
push-button control with an IDCANCEL ID. The dialog box prevents direct user
input, such as mouse and keyboard events, from being sent to the application.
The application continues to receive messages while the dialog box is present.
The IDCANCEL message indicates that the application user wants to end the
remote procedure.
Custom yield method. The
application provides a callback function that the RPC run-time library calls
while a remote operation is in progress. The callback function must retrieve
messages from the message queue (including mouse and keyboard messages) and
must process messages (both queued and non-queued). The RPC run-time library
posts a message to the application s queue when the RPC operation is complete.
The callback function returns a boolean value to the RPC run-time library.
When a
conventional RPC client application makes a remote procedure call, the
MIDL-generated stub calls the RPC run-time library and the library calls the
appropriate transport. These calls are synchronous and block until the server
side sends back a response. In the cooperatively multitasked Windows 3.x
environment, an active, blocked application prevents Windows and other Windows
applications from running. The RpcWinSetYieldInfo function allows you to
direct the application to yield to Windows and other Windows applications while
waiting for an RPC operation to finish.
Windows RPC
client applications can be organized into three classes that correspond to
levels of yielding support: no yielding, standard yielding, and custom
yielding.
Some applications do not yield.
RPC calls block until completion.
Standard-yield applications are
RPC-aware applications that yield but do not need to perform special handling.
Custom-yield applications are
those that are RPC aware and want to perform special handling while an RPC
operation is in progress.
You can
replace the provided dialog-box resource with an application-specified
dialog-box resource. The resource must use the same style as the default and
must contain a single push-button control with an IDCANCEL ID. The dialog-box
function is part of the RPC run-time library and cannot be replaced.
To yield in a
well-behaved manner from within the context of a pending RPC operation,
applications must observe the following rules:
Do not make another RPC call.
If the RPC run-time library detects that a new call is being made during the
yielding period, it returns an error to the caller. This is particularly
important if the application makes RPC calls in response to common messages,
such as WM_PAINT.
Do not exit the application. Do
not close the window specified by the hWnd handle parameter. Your
application can process WM_CLOSE messages in the window procedure and not call DefWindowProc
during the yielding period. For more information about DefWindowProc,
see your Windows API reference documentation.
Return FALSE in response to
WM_QUERYENDSESSION messages. Alternatively, a custom-yield application can use
this message as a signal to cause YieldFunctionName to return FALSE to
the RPC run-time library and end the yielding period.
There is no
guarantee that any code that supports yielding will be invoked. Whether or not
an application yields depends on the specific call, the current state of the
underlying system, and the implementation of the underlying RPC transport.
Applications should not rely on this code to do anything other than manage
yielding.
The RpcWinSetYieldInfo
function can be called more than once by an application. Each call simply
replaces the information stored in the previous calls.
Return Values
Value |
Meaning |
RPC_S_OK |
The
information was set successfully. |
RPC_S_OUT_OF_MEMORY |
Memory
could not be allocated to store the information for this task. |
See Also