线程同步问题?? 如何实现主线程中创建子线程立即挂起,等待子线程完成操作之后,主线程才被唤醒,继续运行下去????? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 主线程中HANDLE hEvent = CreateEvent(...);//创建子线程CreateThread(..., hEvent,....);//hEvent传递给子线程,在子线程执行的最后,设置为有信号状态waitForSingleObject(hEvent, INFINITE); 主程序中:CEvent m_end;m_end.ResetEvent();AfxBeginThread();waitForSingleObject(hEvent, INFINITE);在线程函数结束时:m_end.SetEvent(); 基本观点同1、2楼的。如果主线程是UI线程,建议在主线程中使用MsgWaitForMultipleObjects来等待,这样不会使主线程界面假死。 1.建立一个EventHANDLE m_hEvent=CreateEvent(NULL,TRUE,FALSE,"自己取个Event的名称");2.设置为无信号状态ResetEvent(m_hEvent);3.在主线程里加上下面得话:HANDLE hDeleteEvent=OpenEvent(EVENT_ALL_ACCESS,NULL,"自己取的Event的名");if(WaitForSingleObject(m_hDeleteEvent,INFINITE)==WAIT_OBJECT_0)//有信号才执行下面的操作{ 等待子线程完成操作之后,主线程才被唤醒,继续执行的操作}4.在子线程里加上下面的话:if("子线程完成操作之后"){ SetEvent(m_hEvent);//讲Event设置为有信号状态} 可以混用,如果你需要的话。可以用WaitForMultiObject同步多个 CWinThread *pThread;pThread = AfxBeginThread(ThreadProc, pParam, suspend, 0, 0, CREATE_SUSPENDED); waitForSingleObject(pThread->m_hThread, INFINITE); HANDLE h = CreateThread(...)waitForSingleObject(h, INFINITE); 就可以了,线程内核对像里有一个成员Signaed,线程结束,才受信. 也在学习中,不过有点抗拒MFC! LoadLibrary 错误 998 如何改变一个CEdit的背景颜色 如何调试DLL项目? 求:Visual Assist X 注册码 for vs2003 DialogBar上按钮的闪烁问题 窗体上的控件个数 不是计算机专业的,可以考计算机的研究生???? 急问:atl中可否用cstring类??? 关于PDF文件格式的问题 ATL 操作word事件产生崩溃 请教关于CString提取子串的问题 请教:怎样在两个窗体共享一个控件?
主线程中
HANDLE hEvent = CreateEvent(...);//创建子线程
CreateThread(..., hEvent,....);//hEvent传递给子线程,在子线程执行的最后,设置为有信号状态
waitForSingleObject(hEvent, INFINITE);
CEvent m_end;
m_end.ResetEvent();
AfxBeginThread();
waitForSingleObject(hEvent, INFINITE);在线程函数结束时:m_end.SetEvent();
如果主线程是UI线程,建议在主线程中使用MsgWaitForMultipleObjects来等待,这样不会使主线程界面假死。
HANDLE m_hEvent=CreateEvent(NULL,TRUE,FALSE,"自己取个Event的名称");
2.设置为无信号状态
ResetEvent(m_hEvent);3.在主线程里加上下面得话:
HANDLE hDeleteEvent=OpenEvent(EVENT_ALL_ACCESS,NULL,"自己取的Event的名");
if(WaitForSingleObject(m_hDeleteEvent,INFINITE)==WAIT_OBJECT_0)//有信号才执行下面的操作
{
等待子线程完成操作之后,主线程才被唤醒,继续执行的操作
}4.在子线程里加上下面的话:
if("子线程完成操作之后")
{
SetEvent(m_hEvent);//讲Event设置为有信号状态
}
可以用WaitForMultiObject同步多个
pThread = AfxBeginThread(ThreadProc, pParam, suspend, 0, 0, CREATE_SUSPENDED);
waitForSingleObject(pThread->m_hThread, INFINITE);
waitForSingleObject(h, INFINITE);
就可以了,线程内核对像里有一个成员Signaed,线程结束,才受信.
不过有点抗拒MFC!