CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

怎么使用TerminateThread?

楼主lyghe(TComponent* AOwner)2002-05-30 11:02:02 在 C++ Builder / 基础类 提问

我这样用: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

相关问题

  • tomcat怎么使用?
  • ghost怎么使用?
  • fsockopen()怎么使用?
  • DBComboBox怎么使用
  • _variant怎么使用?
  • 怎么使用RegQueryValue?
  • OnCtlColor怎么使用??
  • OnCtlColor怎么使用??
  • 怎么使用CryptoAPI?
  • session怎么使用?

关键词

  • 线程
  • 函数
  • 转换
  • terminatethread
  • tthread
  • doterminate
  • 调用
  • twinsocketstream
  • onterminate
  • pstream

得分解答快速导航

  • 帖主:lyghe
  • ybjcl
  • Kallen
  • dycdyc123

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo