终止多线程的当前任务

停止多线程的当前任务
本帖最后由 xexiyong 于 2015-06-30 15:48:14 编辑
大家好,有个问题一直困扰自己,就是应用里有不止一个线程,在需要停止所有任务时,某些线程可能还在执行着任务,这个时候怎么去停止它正在做的事,各位有啥见解吗,我正想的不行,谢谢了!
------解决思路----------------------
加状态退出 或是把线程强制关掉
------解决思路----------------------
关注,不知道SuspendThread函数是否可行。
------解决思路----------------------
全局变量不行吧
------解决思路----------------------
最简单就是弄个全局变量,每个线程都在自己的循环中判断这个全集变量。结束时设置这个全集变量即可
------解决思路----------------------
线程持续运行,都是因为有while或for死循环。设置一个全局的结束标志,在线程循环的某处,设置一个if判断,如果结束标志设置,则终止线程循环
------解决思路----------------------
1.线程最好是自行结束,否则会导致其他异常,如资源泄漏等
2.在循环中使用全局变量判定是个简单易行的办法
3.如果要控制的更精准些,还需要加上计数器,启动线程加一,释放线程减一。
当计数器归零的时候进行下一步操作,都在就只能等待了

------解决思路----------------------
我是这样做的。
封装一个Thread类,有个成员变量 m_running = true;在real线程函数中(注意,通过把this传给线程函数,从而可以执行Thread的普通成员函数)while(m_running){}
要停止线程,先把m_running=false,然后WaitForSingleObject(hThread)等待线程正常结束
------解决思路----------------------
正在运行的线程中,有一部分线程正处于打开句柄同步读取数据的状态,
这一类线程,往往设置了变量做为退出标志也无法及时退出,因为同步读取数据函数阻塞了线程。
所以想解决这一类线程的安全退出问题,可以把打开的句柄当作全局变量,
主线程要退出时,将子线程打开的句柄关闭掉,这样被函数阻塞的子线程就会返回错误码,
然后子线程需要做一些数据保存或回收处理,再安全退出。
主线程可以在置退出标志并关闭线程打开的句柄后调用 WaitForMultiObjects 等待所有线程退出,
如果子线程在指定时间内没有退出,那么主线程将强制结束子线程。