关于终止等待线程的小问题

ayio 2005-07-31 02:22:49
我在C++Builder里面新开了一个线程,里面用了TEvent类的成员函数WaitFor来等待某个事件,然后做一些工作

TMyThread::Execute()
{
while(!Terminate)
{
dwResult = pEvent->WaitFor(2000);
switch(dwResult)
{
case wrSingled:
//Do something
case wrTimeout:
//超时
case wrAbandon:
//
default:
//出错
}
}
}

怎么样才能终止这个线程呢?
我直接用 delete 删除pEvent,打算让程序响应 wrAbandon 分支,但是不行,报错
求各位大侠帮帮忙啊,在下不胜感激!
...全文
185 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayio 2005-08-02
  • 打赏
  • 举报
回复
好的,试一下
FengSC 2005-08-02
  • 打赏
  • 举报
回复
To ayio(学习编程ing……)
但是在调用了 pEvent->WaitFor(2000); 语句后,线程被挂起了,调用Terminate()函数好像没有反应。

还有我用的是BCB的TEvent类,pEvent=new TEvnet(NULL, false, false, NULL); 没有直接调用CreateEvent函数,怎么办呢?

调用Terminate是通知线程需要结束了,不需要有立即的表现。
TEvent类的结构函数中使用CreateEvent函数创建信号量句柄。关闭这个句柄后可以得到wrAbandon返回值。
raystone 2005-08-02
  • 打赏
  • 举报
回复
调用TMyThread->Terminate()
pEvent->WaitFor(2000);
等待2秒应该会超时返回,然后就会退出了
FengSC 2005-08-01
  • 打赏
  • 举报
回复
先要调用线程的Terminate();函数,直接删除pEvent肯定有问题,你可以试一下关闭CreateEvent函数创建的事件句柄。
ayio 2005-08-01
  • 打赏
  • 举报
回复
怎么搞啊!!~
具体一点
noock 2005-08-01
  • 打赏
  • 举报
回复
调用TMyThread->Terminate()
将Terminated置1
pEvent->WaitFor(2000);
等待2秒应该会超时返回,然后就会退出了
如果你把
TMyThread->FreeOnTerminate 置为true,则Execute()返回后会自动释放内存,线程就完全终止了,否则内存必须手动释放
LocustWei 2005-08-01
  • 打赏
  • 举报
回复
TBOOL TerminateThread(

HANDLE hThread, // handle to the thread
DWORD dwExitCode // exit code for the thread
);
ayio 2005-08-01
  • 打赏
  • 举报
回复
但是在调用了 pEvent->WaitFor(2000); 语句后,线程被挂起了,调用Terminate()函数好像没有反应。

还有我用的是BCB的TEvent类,pEvent=new TEvnet(NULL, false, false, NULL); 没有直接调用CreateEvent函数,怎么办呢?
guxingfeiyu 2005-07-31
  • 打赏
  • 举报
回复
试一下调用SetEvent函数

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧