这样终止线程行吗?

来源:百度知道 编辑:UC知道 时间:2024/06/20 10:04:56
if (GetExitCodeThread (m_hThread1, &code))
if (STILL_ACTIVE == code)
{
// ExitThread (code);
TerminateThread (m_hThread1, code);
CloseHandle (m_hThread1);
}
不知道这样是不是立即终止线程函数!不过我好像没有成功!
应该怎么样才能立即终止线程函数呢?

CloseHandle是关闭线程句柄,用来释放线程资源的,不是终止线程的.线程的终止用terminatethread或exitthread,TerminateThread的使用会导致各类资源释放问题,主要是与该线程相连的各类dll,他们无法得到线程退出的通知。应该在线程中自然退出(即隐式调用ExitThread)或直接显式调用ExitThread。退出的时机应由同步对象或其他机制来实现,而且主线程一般应使用WaitForSingleObject函数等待该线程的句柄,以确保线程的退出。 希望对你有帮助

你的程序是在线程外部执行的吧?
虽然理论上说TerminateThread(...)可以在线程外部将线程结束,但是实际表明,它并非总是可以成功,或者说很难成功。GetExitCodeThread(...)用于得到线程的退出代码,实际上就是线程函数的返回值,然而很多时候这个函数调用会发生失败,你可以看看你调用GetExitCodeThread(...)有没有返回TRUE。
我的建议是,如果某些耗时的操作可能“死掉”,最好不要用TerminateThread(...)结束它,你可以用计时器为它计时,当超过时限线程没有反应,那就通过改变一个信号量的值来告诉线程准备退出。启动线程的时候用CreateThread(...),不要AfxBeginThread(...)。
希望对你有用。