类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
在多线程应用程序中,通过new方法产生一个新的线程对象,
TMyThread *NewThread=new TMyThread(false);
如何正确销毁这个线程呢?
1)如果线程的Execute方法执行完返回了,是不是该线程对象就自动销毁了呢?还需要Delete NewThread来清理吗?
2)如果线程的Execute正在执行,而执行Delete NewThread,线程会正常结束吗?
网友回答:
TThread::FreeOnTerminate属性为true时,线程结束时自动析构
2 如果线程的Execute正在执行,而执行Delete NewThread,线程会正常结束吗?
有可能不会正常结束,最保险的做法是调用TThread::WaitFor函数等待线程结束
TMyThread *NewThread=new TMyThread(false);
NewThread->FreeOnTerminate = true; //或则把这句放在TMyThread的构造函数中
要强制销毁终线程用 NewThread->Terminate();
也可以用API: TerminateThread()
只要保证建立与销毁TThread对象在同一个线程中就行了 有两种办法:
1、在TThread对象的OnTerminate事件中填写销毁线程对象的代码,因为OnTerminate事件的代码它会切换到主线程去执行,这样就保证了建立与销毁TThread对象在同一个线程中完成
2、使用关键字Synchronized
Synchronized(new TMyThread());
Synchronized(delete TMyThread);