|
Blocking and Nonblocking Pipe Operations
The wait mode (blocking or nonblocking) of a pipe handle determines whether
the ReadFile, WriteFile, and ConnectNamedPipe functions return immediately in situations that would otherwise require an
indefinite wait. By default, all named pipe handles returned by the CreateNamedPipe or CreateFile function are created with blocking-wait mode enabled. Nonblocking-wait mode
can be enabled for a server's pipe handle by specifying PIPE_NOWAIT in CreateNamedPipe. Both server and client processes can change a pipe handle's wait mode by
specifying either PIPE_WAIT or PIPE_NOWAIT in a call to the SetNamedPipeHandleState function.
Note that nonblocking-wait mode is supported for compatibility with Microsoft® LAN Manager version 2.0, and it should not be used to achieve overlapped
input and output (I/O) with named pipes. Overlapped I/O should be used instead
because it enables time-consuming ReadFile, WriteFile, and ConnectNamedPipe operations to execute in the background after the function returns. For more
information about overlapped I/O, see Synchronous and Overlapped Input and Output.
A ReadFile operation is affected by the wait mode of a pipe handle when the pipe is
empty. With a blocking-wait handle, the operation is not completed successfully
until data is available from a thread writing to the other end of the pipe. Using
a nonblocking-wait handle, the function returns FALSE immediately, and the GetLastError function returns ERROR_NO_DATA.
A WriteFile operation is affected by a pipe handle's wait mode when there is insufficient
space in the pipe's buffer to hold all the data. With a blocking-wait handle,
the write operation cannot succeed until sufficient space is created in the
buffer by a thread reading from the other end of the pipe. With a nonblocking-wait
handle, the write operation returns TRUE immediately, without writing any
bytes (for a message-type pipe) or after writing as many bytes as the buffer holds
(for a byte-type pipe).
A ConnectNamedPipe operation is affected by the wait mode of a pipe handle when there is no
client connected or waiting to connect to the pipe instance. With a blocking-wait
handle, the connect operation does not succeed until a client process connects
to the pipe instance by calling either the CreateFile or CallNamedPipe function. With a nonblocking-wait handle, the connect operation returns FALSE
immediately, and the GetLastError function returns ERROR_PIPE_LISTENING.
The wait mode of a pipe handle does not affect read or write operations when
using the TransactNamedPipe or CallNamedPipe function.
Related Links
Software for Delphi and C++ Builder developers
Software for Visual Studio .NET developers
Software for Visual Basic 6 developers
Delphi Tips&Tricks
MegaDetailed.NET
TMS Scripter Studio Pro components for Delphi/C++Builder
More Online Helps
Win32 Multimedia Programmer's Reference (mmedia.hlp)
OLE Programmer's Reference (ole.hlp)
Microsoft Windows Pen API Programmer's Reference (penapi.hlp)
Microsoft Windows Sockets 2 Reference (sock2.hlp)
Microsoft Windows Telephony API (TAPI) Programmer's Reference (tapi.hlp)
Unix Manual Pages
|