Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ AfxPumpMessage()用于?_C++_Visual C++_Mfc - Fatal编程技术网

C++ AfxPumpMessage()用于?

C++ AfxPumpMessage()用于?,c++,visual-c++,mfc,C++,Visual C++,Mfc,我有一个主线程和子线程。 在子线程中,我向主线程发送消息。 在主线程中,我称之为: while( ::WaitForSingleObject(hThread, 0) == WAIT_TIMEOUT ) { MSG message; while( ::PeekMessage( &message, NULL , WM_MIN, WM_MAX, PM_NOREMOVE ) ) { ::AfxPumpMessage(); } } 它很好用!。但是我不知道AfxPumpMessag

我有一个主线程和子线程。 在子线程中,我向主线程发送消息。 在主线程中,我称之为:

while( ::WaitForSingleObject(hThread, 0) == WAIT_TIMEOUT )
{
 MSG    message;
 while( ::PeekMessage( &message, NULL , WM_MIN, WM_MAX, PM_NOREMOVE ) )
 {
::AfxPumpMessage();
 }
}
它很好用!。但是我不知道AfxPumpMessage()是如何工作的?如何避免僵局?
有人帮我吗?提前感谢。

您的代码运行繁忙的循环。当线程收到信号时,外部
while
循环终止。在此之前,循环运行繁忙并发送消息。这允许主线程在子线程上等待,但也可以响应子线程发送的消息

事实上,调用
PeekMessage
是毫无意义的。这是毫无意义的,因为
AfxPumpMessage
将执行相同的操作,并泵送所有排队的消息

正如我所说,您的外部循环是一个繁忙的循环。你真的不想那样。没有必要为了什么都不做而消耗CPU周期。您应该使用
MsgWaitForMultipleObjects
,而不是
WaitForSingleObject
。这允许您在线程上等待,并能够分派消息

假设您不想处理排队的消息,只想分派已发送的消息,您的循环可能如下所示:

while( ::MsgWaitForMultipleObjects(1, &hThread, FALSE, INFINITE, 
    QS_SENDMESSAGE) == WAIT_OBJECT_0 + 1 )
{
    MSG message;
    ::PeekMessage(&message, 0, 0, 0, PM_NOREMOVE);
}

这不会处理排队的消息。如果您确实需要处理这些,那么循环看起来会有点不同。

您的代码运行一个繁忙的循环。当线程收到信号时,外部
while
循环终止。在此之前,循环运行繁忙并发送消息。这允许主线程在子线程上等待,但也可以响应子线程发送的消息

事实上,调用
PeekMessage
是毫无意义的。这是毫无意义的,因为
AfxPumpMessage
将执行相同的操作,并泵送所有排队的消息

正如我所说,您的外部循环是一个繁忙的循环。你真的不想那样。没有必要为了什么都不做而消耗CPU周期。您应该使用
MsgWaitForMultipleObjects
,而不是
WaitForSingleObject
。这允许您在线程上等待,并能够分派消息

假设您不想处理排队的消息,只想分派已发送的消息,您的循环可能如下所示:

while( ::MsgWaitForMultipleObjects(1, &hThread, FALSE, INFINITE, 
    QS_SENDMESSAGE) == WAIT_OBJECT_0 + 1 )
{
    MSG message;
    ::PeekMessage(&message, 0, 0, 0, PM_NOREMOVE);
}

这不会处理排队的消息。如果您确实需要处理这些,那么循环看起来会有点不同。

您的代码运行一个繁忙的循环。当线程收到信号时,外部
while
循环终止。在此之前,循环运行繁忙并发送消息。这允许主线程在子线程上等待,但也可以响应子线程发送的消息

事实上,调用
PeekMessage
是毫无意义的。这是毫无意义的,因为
AfxPumpMessage
将执行相同的操作,并泵送所有排队的消息

正如我所说,您的外部循环是一个繁忙的循环。你真的不想那样。没有必要为了什么都不做而消耗CPU周期。您应该使用
MsgWaitForMultipleObjects
,而不是
WaitForSingleObject
。这允许您在线程上等待,并能够分派消息

假设您不想处理排队的消息,只想分派已发送的消息,您的循环可能如下所示:

while( ::MsgWaitForMultipleObjects(1, &hThread, FALSE, INFINITE, 
    QS_SENDMESSAGE) == WAIT_OBJECT_0 + 1 )
{
    MSG message;
    ::PeekMessage(&message, 0, 0, 0, PM_NOREMOVE);
}

这不会处理排队的消息。如果您确实需要处理这些,那么循环看起来会有点不同。

您的代码运行一个繁忙的循环。当线程收到信号时,外部
while
循环终止。在此之前,循环运行繁忙并发送消息。这允许主线程在子线程上等待,但也可以响应子线程发送的消息

事实上,调用
PeekMessage
是毫无意义的。这是毫无意义的,因为
AfxPumpMessage
将执行相同的操作,并泵送所有排队的消息

正如我所说,您的外部循环是一个繁忙的循环。你真的不想那样。没有必要为了什么都不做而消耗CPU周期。您应该使用
MsgWaitForMultipleObjects
,而不是
WaitForSingleObject
。这允许您在线程上等待,并能够分派消息

假设您不想处理排队的消息,只想分派已发送的消息,您的循环可能如下所示:

while( ::MsgWaitForMultipleObjects(1, &hThread, FALSE, INFINITE, 
    QS_SENDMESSAGE) == WAIT_OBJECT_0 + 1 )
{
    MSG message;
    ::PeekMessage(&message, 0, 0, 0, PM_NOREMOVE);
}

这不会处理排队的消息。如果您确实需要处理这些,那么循环看起来会有点不同。

这是一个非常繁忙的消息循环。改用
MsgWaitForMultipleObjects
。至于
AfxPumpMessage
,它是什么?我找不到它的官方文件。你为什么决定叫它?你为什么要写
WM_MIN
WM_MAX
?WM_MIN和WM_MAX是我的定义。而且,如果我没有调用AfxPumpMessage(),它将是死锁。但是我不知道AfxPumpMessage()是如何工作的。你能帮我解决这个问题吗?
WM\u MIN
WM\u MAX
服务的目的是什么。您只想处理一小部分消息?这是一个令人震惊的繁忙消息循环。改用
MsgWaitForMultipleObjects
。至于
AfxPumpMessage
,它是什么?我找不到它的官方文件。你为什么决定叫它?你为什么要写
WM_MIN
WM_MAX
?WM_MIN和WM_MAX是我的定义。而且,如果我没有调用AfxPumpMessage(),它将是死锁。但是我不知道AfxPumpMessage()是如何工作的。你能帮我解决这个问题吗?
WM\u MIN
WM\u MAX
服务的目的是什么。您只想处理一小部分消息?这是一个令人震惊的繁忙消息循环。改用
MsgWaitForMultipleObjects
。至于
AfxPumpMessage
,它是什么?我找不到它的官方文件。你为什么决定叫它?你为什么要写
WM_MIN
WM_MAX
?WM_MIN和WM_MAX是我的定义。而且,如果我没有调用AfxPumpMessage(),它将是死锁。但是我不知道AfxPumpMessage()是如何工作的。你能帮我吗