一个线程,属于复杂计算,需要合理的启停之。想问下,如果想能让停止动作比较及时的能完成,有什么好办法?因为一般线程停止动作最好是由自己触发,那我在外部想停止它的话一般是用事件或者标志位。对于一个大量代码复杂计算的线程,是不是只能每行之间插入检测代码?或者在for循环每次插入检测代码,检测停止事件是否到来? 不然的话,那些没有检查停止信号的代码段,是不受控的吧?
曾经考虑过TerminateThread来,不过查了下,对这个函数一般都不怎么推荐使用 ,涉及到泄漏等问题。想请问下,有没有什么比较好的“中断”方式,能让线程对外界响应更及时
曾经考虑过TerminateThread来,不过查了下,对这个函数一般都不怎么推荐使用 ,涉及到泄漏等问题。想请问下,有没有什么比较好的“中断”方式,能让线程对外界响应更及时
除非你在外部调用TerminateThread,而这又是你接受不了的。
// 自己释放相关内存
TerminateThread(tThread,0);
// 自己释放相关内存
TerminateThread(tThread,0);复杂计算当中的线程,能SuspendThread下来么? 如果能,这个SuspendThread函数会阻塞一段时间吗?如果会,也没法用。释放相关内存指得是哪些?
第二个, 退出时把标志置为false, 然后添加如下语句 DWORD dwExit = 0;
while (TRUE)
{
if (m_pThread != NULL)
{
DWORD dwExit;
if (GetExitCodeThread(m_pThread->m_hThread, &dwExit))
{
Sleep(1);
continue;
}
} break;
}
这个就是退出的函数。 你退出时, 置此标志为false。 线程下次循环当然会退出了。
明白了。 是你的线程里 sleep(5000), 是吧? 这个好办, 修改下Sleep, 如下:
void CMuZiZongHeng::mf_Sleep(DWORD dwMS, const BOOL &bStop)
{
DWORD dwTickstart = GetTickCount();
while(!bStop)
{
if ( (GetTickCount() - dwTickstart) > dwMS)
{
break;
} Sleep(1);
}
}你在线程里用mf_Sleep(5000, 你的线程的bool标志);
你也可以这样设计,把计算中需要的资源都分配好,创建线程 等待线程退出 如果想停止了,就terminate,然后清理资源。
如果用 _beginthreadex的话,貌似就会有问题了我想,这种方式还不是好方式,最根本就是修改 你调用的那些函数,不要一次就占用那么长时间