假设您有一个带有启动/停止线程的按钮的表单(不暂停或中断,我真的需要停止线程!) 看看这段代码:
Constructor()
{
m_TestThread = new Thread(new ThreadStart(ButtonsThread));
m_bStopThread = false;
}
ButtonClick
{
// If the thread is not running, start it
m_TestThread.Start();
// If the thread is running, stop it
m_bStopThread = true;
m_TestThread.Join();
}
ThreadFunction()
{
while(!m_bStopThread)
{
// Do work
}
}
2个问题(记住CF): - 我怎么知道线程是否正在运行(我似乎无法访问m_pThreadState,我尝试过C ++ GetThreadExitCode(),它会给出错误的结果)? - 最重要的问题:如果我已经停止了线程,我无法重新启动它,很可能因为m_TestThread.m_fStarted仍然设置(并且它是私有的,所以我无法访问它)!因此m_TestThread.Start()会生成一个异常(StateException)。
使用Abort()停止线程无法解决问题。如果我把我的m_TestThread = null;它工作,但后来我创建了内存泄漏。即使我等了xx秒,GC也不会清理。
有人有想法吗?所有帮助高度赞赏! Grtz ë