怎么使用TerminateThread?
我这样用:TerminateThread( thread->Handle, 0 );
编译报错:不能把const unsigned int转换成void*
应该怎么用啊?
问题点数:60、回复次数:9Top
1 楼lyghe(TComponent* AOwner)回复于 2002-05-30 11:10:53 得分 0
thread是TThread的子类的对象。Top
2 楼Jinglihui(雪狐)回复于 2002-05-30 12:41:21 得分 0
我做多线程的时候,线程都是用BCB里的TThread产生的子类,所以我没有调用API的TerminateThread,而是调用TThread 的里的DoTerminate方法
如果你的线程类是继承自BCB的TThread,可以用线程本的DoTerminate方法!我个人觉得用TThread 封装的方法要比直接调用API安全性要好一点!Top
3 楼lyghe(TComponent* AOwner)回复于 2002-05-30 12:54:31 得分 0
有疑问。CB的帮助原文:
DoTerminate calls the OnTerminate event handler, but does not terminate the thread.
意思似乎是:DoTerminate调用OnTerminate事件句柄,但不停止线程。由此看来它只是触发了一下OnTerminate事件,而不是真正的让线程停止。
事实上,TThread还有一个函数:Terminate。这个函数的作用我不是非常明白,但我知道它也不是强行让线程停止。而我需要的是立即杀掉线程,不管任何时候。Top
4 楼jerry921(jerry)回复于 2002-05-30 17:33:50 得分 0
其它Excute函数运行完了,这个线程序就结束了,如果你想在循环中结束,就设Terminated为true,而在循环加入 !Terminated ,象下面这个一样,请注意while.
void __fastcall TMyClientThread::Execute()
{
// create a TWinSocketStream for reading and writing
TWinSocketStream *pStream = new TWinSocketStream(ClientSocket1->Socket, 60000);
try
{
// fetch and process commands until the connection or thread is terminated
while (!Terminated && ClientSocket1->Active)
{
try
{
char buffer[10];
GetNextRequest(buffer); // GetNextRequest must be a thread-safe method
// write the request to the server
pStream->Write(buffer, strlen(buffer) + 1);
// continue the communication (eg read a response from the server)
...
}
catch (Exception &E)
{
if (!E.ClassNameIs("EAbort"))
Synchronize(HandleThreadException()); // you must write HandleThreadException
}
}
}
__finally
{
delete pStream;
}
}Top
5 楼ybjcl()回复于 2002-05-30 18:16:58 得分 20
很简单,强制转换就可以了:
TerminateThread( (void *)thread->Handle, 0 );
Top
6 楼ybjcl()回复于 2002-05-30 18:17:31 得分 0
很简单,强制转换就可以了:
TerminateThread( (void *)thread->Handle, 0 );
Top
7 楼ybjcl()回复于 2002-05-30 18:18:01 得分 0
很简单,强制转换就可以了:
TerminateThread( (void *)thread->Handle, 0 );
Top
8 楼Kallen(我为峰)回复于 2002-06-01 17:35:08 得分 20
应该这样转换就可以了:
TerminateThread((HANDLE)thread->Handle, 0 );Top
9 楼dycdyc123(重出江湖)回复于 2002-06-01 18:08:32 得分 20
应该这样转换就可以了:
TerminateThread((HANDLE)thread->Handle, 0 );
看她的参数具体是什么?
强制COnvert!
Top




