C++ C++;和命名管道
关于:C++ C++;和命名管道,c++,winapi,message,named-pipes,C++,Winapi,Message,Named Pipes,关于: PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) 如果hWnd为空,则PeekMessage将检索 属于任何窗口的消息 到当前线程,以及任何 当前线程上的消息 hwnd值为空的消息队列 (参见MSG结构)。因此如果 hWnd为空,窗口消息和 线程消息将被处理 通过命名管道接收的消息是否包含在窗口消息和线程消息中。命名管道不发送窗口消息 此上下文中的线程消息是特殊的,与命名管道无关 改用 代码示例: void MessageLoop(HANDLE
PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)
如果hWnd为空,则PeekMessage将检索
属于任何窗口的消息
到当前线程,以及任何
当前线程上的消息
hwnd值为空的消息队列
(参见MSG结构)。因此如果
hWnd为空,窗口消息和
线程消息将被处理
通过命名管道接收的消息是否包含在窗口消息和线程消息中。命名管道不发送窗口消息 此上下文中的线程消息是特殊的,与命名管道无关 改用 代码示例:
void MessageLoop(HANDLE hNamedPipe)
{
do {
DWORD res = MsgWaitForMultipleObjects(1, &hNamedPipe, INFINITE, QS_ALLEVENTS, MWMO_INPUTAVAILABLE);
if (res == WAIT_OBJECT_0) {
/* Handle named pipe -- at this point ReadFile will not block */
} else if (res == WAIT_OBJECT_0 + 1) {
MSG msg;
if (!GetMessage(&msg, NULL, 0, 0))
break; /* WM_QUIT */
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} while (1);
}
否,Windows消息和命名管道完全不相关。您需要使用函数来等待传入消息或指定管道上的消息
请注意,
MsgWaitForMultipleObjectsEx
实际上并不检索消息;检查其返回值以查看指定管道上是否有Windows消息或数据,然后根据需要使用GetMessage
或ReadFile
。我不这么认为。您需要执行ReadFile或类似操作。能否提供一个简单的演示,演示如何通过MsgWaitForMultipleObjects
从管道中读取数据结构?谢谢!但是有几个疑问,您的代码示例中的WAIT\u OBJECT\u 0
是什么?如何检索管道中的特定结构?管道不传递结构。它们传递字节。而WAIT_OBJECT_0仅表示等待句柄数组中的第一个对象处于警报状态-在这种情况下,等待句柄数组只有一个对象hNamedPipe。您能否提供一个简单的演示,说明如何通过MsgWaitForMultipleObjects
从管道读取数据结构,以及如何写入管道?我使用了ReadFile
和WriteFile
,但它只能处理字符串。