立即结束线程的有关问题
立即结束线程的问题?我编写了一个基于对话框的MFC EXE,里面有两个按钮A和B,A是启动工作者线程,B是结束工作
立即结束线程的问题?
我编写了一个基于对话框的MFC EXE,里面有两个按钮A和B,A是启动工作者线程,B是结束工作者线程。
启动工作者线程代码:
CWinThread* m_pThread=AfxBeginThread(ThreadProc,NULL, THREAD_PRIORITY_ABOVE_NORMAL,0,0,NULL);
工作者线程函数代码(等待一个小时,然后做某事):
UINT ThreadProc(LPVOID pParam)
{
sleep(1小时);
Do Someting;
return 0;
}
我的问题是:假设我已经启动了工作者线程十分钟,现在我点击B按钮想立即结束工作者线程,但是由于此时工作者线程已经处于sleep(1小时)之中,所以我要等很长时间工作者线程才能正常结束,有没有办法立即结束工作者线程呢(别太暴力或者直接关闭程序等等)。
[解决办法]有个方法,用2个event A和B,初始无信号,在主线程里启动个定时器,到了1小时然后A设置为有信号。B用来退出,想退出的时候将B设置为有信号状态。然后在子线程里waitformultiobject,第三个参数传个false
[解决办法]等待1小时好像还可以用“可等待的计时器对象”来做(这玩意儿没怎么用过,印象中好像可以这么用),这样就不用在主线程开定时器了
[解决办法]{
for(int I=0;I<36000;I++)
{
sleep(100);
If(isOver) return 0;
}
Do SomeThing
}
[解决办法]别在工作线程动态分配内存,随便 使用 exitthread terminalthread 或者让线程自己return 都可以