WaitForSingleObject冻结应用
WaitForSingleObject freezing application
我有一个内核驱动程序检测进程创建,并使用一个应用程序显示结果。我使用WaitForSingleObject(event, INFINITE)
来检测进程的创建。
它在控制台应用程序中工作得很好,但是当我将它添加到GUI应用程序中时,整个应用程序冻结了。我怀疑这是由于WaitForSingleObject
,经过一些谷歌搜索,我尝试使用MsgWaitForMultipleObjects
,但它没有工作。
编辑:我正在使用c++ Windows窗体应用程序
我必须继续等待,因为我正在"永远"监视,而不仅仅是一次性事件。
我可以提供代码或更多信息,如果你需要,将感激任何形式的帮助,谢谢!
我在我的c++ winform应用程序的头文件中做了以下操作:
*注意myEvent = ::OpenEventW(....);
while (true)
{
switch (::MsgWaitForMultipleObjects(
1, &myEvent, FALSE,
INFINITE, QS_ALLINPUT)
)
{
case WAIT_OBJECT_0:
{
//do my stuff (send IOCTL to driver and stuff)
}
case (WAIT_OBJECT_0 + 1):
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
break;
}
}
}
但是,它一直转到交换机的默认部分。我做错了什么?
MsgWaitForMultipleObjects
绝对有效,但您必须了解如何工作。它将返回事件或到达的消息。这些信息是防止应用程序冻结所需要的。但是你必须处理这个消息:
GetMessage(&msg, 0, 0, 0);
TranslateMessage(&msg);
DispatchMessage(&msg);
假设这是c++和MFC GUI应用程序,在内部代码中有一个循环,检索消息并调用您在c++主代码中提供的函数来处理windows消息(相当于GetMessage())…DispatchMessage()在C窗口程序中)。如果线程执行Wait…(),则循环停止。
一种可能的工作是生成一个线程,让它执行Wait…(),并有选择地向主线程发送windows消息,以便常规的消息处理接口可以继续与你的"助手"线程一起使用。
我不确定细节,但这里的人可能能够帮助,或者可能作为msdn论坛或msdn文章。
- QT应用程序冻结
- QT应用程序接口冻结
- 如何在不冻结线程/应用程序的情况下减慢方法执行速度
- 在线程中复制文件以防止冻结应用程序
- 在C++中读取文件时应用程序冻结
- 监视C++OpenFrameworks应用程序是否冻结或内存泄漏,然后强制退出并重新启动
- 在这个基于对话框的应用程序中,GUI会在几秒钟后冻结
- 故意在 VB.NET 中冻结应用程序
- 如何在不冻结应用程序 1 的情况下从另一个应用程序 1 执行应用程序 2
- 在 android 上向 JNI 类添加私有字段会冻结应用程序
- Qt 应用程序在从 <QUrl>NetworkAccessManager->get() 回调访问 QList<QLlnkedList* >时冻结
- 为什么这个子网类应用程序冻结了
- Qt事件后,长例程冻结了我的应用程序一段时间
- WaitForSingleObject冻结应用
- Win32 API:打开对话框窗口后应用程序冻结
- c++ linux时间冻结应用程序
- wxWidgets应用程序在尝试启动新对话框时冻结
- 当添加一个用于监听网络的新线程时,应用程序冻结
- 更新CListCtrl时MFC应用程序冻结
- 应用冻结