多线程下的异步操作,该如何解决
多线程下的异步操作
我的主窗口是个对话框程序,我开了个计算线程处理计算,在计算线程中有个异步操作,我在子线程下创建一个event内核对象,再调用WaitForSingleObject(event, INFINITE)等待异步操作的完成,在异步操作结束的时候我调用了SetEvent使event重置有信号,这个计算过程在dos单线程下可以正常执行,但是在这个多线程下就无法进行,异步操作不执行。请问大家这是什么原因呢?异步操作会自己新开辟一个线程么?
------解决方案--------------------
你的主线程和工作者线程是否会出现死锁呐
要不你试试这个
msgwaitformultipleobjects
------解决方案--------------------
http://blog.csdn.net/silvervi/article/details/5874212
------解决方案--------------------
子线程和异步操作死锁
慎用
改为
看下
我的主窗口是个对话框程序,我开了个计算线程处理计算,在计算线程中有个异步操作,我在子线程下创建一个event内核对象,再调用WaitForSingleObject(event, INFINITE)等待异步操作的完成,在异步操作结束的时候我调用了SetEvent使event重置有信号,这个计算过程在dos单线程下可以正常执行,但是在这个多线程下就无法进行,异步操作不执行。请问大家这是什么原因呢?异步操作会自己新开辟一个线程么?
------解决方案--------------------
你的主线程和工作者线程是否会出现死锁呐
要不你试试这个
msgwaitformultipleobjects
------解决方案--------------------
http://blog.csdn.net/silvervi/article/details/5874212
------解决方案--------------------
子线程和异步操作死锁
慎用
WaitForSingleObject(event, INFINITE)
改为
DWORD dwRet = 0;
MSG msg;
while (TRUE)
{
dwRet = WaitForSingleObject(m_hThread, 50);
switch(dwRet)
{
case WAIT_OBJECT_0:
break; //break the loop
case WAIT_TIMEOUT :
PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
continue;
default:
break; // unexpected failure
}
break;
}
看下