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
,但它只能处理字符串。