应该很简单,但搞了半天,也找了半天.没搞定,所以很郁闷,大家能否帮忙看一下. 如下:
一个控制台程序,向导生成,使用MFC,设置全部是默认.
声明线程函数 UINT proc(LPVOID param);
在主程序添加代码部分加入三行
CWinThread *pThread;
pThread = AfxBeginThread(proc, NULL);
WaitForSingleObject(pThread, INFINITE); 主程序里接下来当然就是return了. 线程函数如下:
UINT proc(LPVOID param)
{
cout<<"..........................."<<endl;
cout<<"..........................."<<endl;
for(int i=0; i<3; i++){
cout<<"Output char "<<i<<endl;
}
cout<<"Thread "<<"over!"<<endl;
return 0;
}
运行程序,输出明显不正常,只有一开始的一行"."
如果将WaitForSingleObject(pThread, INFINITE)改为Sleep(1000)
则正常输出,但显然这种方式不是太实用,我是希望不论子线程运行的时间是多少秒,只有能子线程运行退出后,主线和方可退出.而不要人为地去延时. 而实际上我是要有多个子线程,现在的想法是在循环中创建这些子线程,然后将线程指针返回给一个数组,然后WaitForMultipleObjects(3(三个子线程), threadArray, false, INFINITE);
然后写了一个demo也不正常,子线程还是能被正常创建,但总是会随主线程退出而中止.也就是一样的感觉,就是主线程刹不住车的感觉。 现在我就是不明白怎么要主线程刹住车,等子线程执行完之后再退出。
请各位指点一下,这个问题在单子线程和多子线程是如何实现的?我的代码问题在哪里?
一个控制台程序,向导生成,使用MFC,设置全部是默认.
声明线程函数 UINT proc(LPVOID param);
在主程序添加代码部分加入三行
CWinThread *pThread;
pThread = AfxBeginThread(proc, NULL);
WaitForSingleObject(pThread, INFINITE); 主程序里接下来当然就是return了. 线程函数如下:
UINT proc(LPVOID param)
{
cout<<"..........................."<<endl;
cout<<"..........................."<<endl;
for(int i=0; i<3; i++){
cout<<"Output char "<<i<<endl;
}
cout<<"Thread "<<"over!"<<endl;
return 0;
}
运行程序,输出明显不正常,只有一开始的一行"."
如果将WaitForSingleObject(pThread, INFINITE)改为Sleep(1000)
则正常输出,但显然这种方式不是太实用,我是希望不论子线程运行的时间是多少秒,只有能子线程运行退出后,主线和方可退出.而不要人为地去延时. 而实际上我是要有多个子线程,现在的想法是在循环中创建这些子线程,然后将线程指针返回给一个数组,然后WaitForMultipleObjects(3(三个子线程), threadArray, false, INFINITE);
然后写了一个demo也不正常,子线程还是能被正常创建,但总是会随主线程退出而中止.也就是一样的感觉,就是主线程刹不住车的感觉。 现在我就是不明白怎么要主线程刹住车,等子线程执行完之后再退出。
请各位指点一下,这个问题在单子线程和多子线程是如何实现的?我的代码问题在哪里?
另外就是对多个子线程,我是定义一个
HANDLE hWait[3]
然后这样(在之前代码基础上) for(int i=0; i<3; i++){
pThread = AfxBeginThread(proc, NULL);
hWait[i] = pThread->m_hThread;
} WaitForMultipleObjects(3 ,hWait, true ,INFINITE);
等待所有子线程退出后返回.
好像可以达到效果,但我不知道这是不是相对规范的用法???
答完这个就可以结这个贴子了:)