怎样直接杀掉线程。

五行擒拿术 2000-08-21 12:27:00
我遇到了这种问题,辅助线程是一个下载的线程,如果在线程中用
while( m_IsStop )
{
...
处理程序段;
}
检测变量的方式来终止线程,则会因为“处理程序段”的执行时间过长(是一段从Internet上读数据的代码),而造成用户等待时间过长。而用TerminateThread()从外部终止线程,又会引起内存的泄露,怎么办?有没有办法能够立即终止线程,而不需要等待线程自己来退出??


...全文
759 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
panda_w 2000-12-30
  • 打赏
  • 举报
回复
可以使用同步事件的!
五行擒拿术 2000-08-24
  • 打赏
  • 举报
回复
在C++BUILDER中是有一个类 TThread ,里面有一个Terminate()的函数。可以立即终止线程。

Signals the thread to terminate by setting the Terminated property to true.

void __fastcall Terminate(void);

Description

Terminate sets the thread Terminated property to true, signaling that the thread should be terminated as soon as possible. Unlike the Windows API TerminateThread, which forces the thread to terminate immediately, the Terminate method merely requests that the thread terminate. This allows the thread to perform any cleanup before it shuts down.

For Terminate to work, the thread's Execute method and any methods that Execute calls should check Terminated periodically and exit when it's true.

而且,很多软件,比如Netant下栽时,显然也会有线程的阻塞问题。却可以即时中断。

请再赐教!!!!!
Redspider 2000-08-24
  • 打赏
  • 举报
回复
现在的问题不是能否检测出线程阻塞,而是在线程阻塞的情况下无法正常使线程退出。

总不至于象单片机里那样加个复位电平吧?
opkj 2000-08-24
  • 打赏
  • 举报
回复
这是在单片机上常用的一种技术,中文名字叫“看门狗”。也就是timeout.
Holly 2000-08-24
  • 打赏
  • 举报
回复
opkj: ?????--->watch dog
Redspider 2000-08-24
  • 打赏
  • 举报
回复
如果你没有办法在读数据的过程中直接或者间接插入你的代码的话。。。。。。我同意HOLLY的看法


要么把UI和这段下载线程分离开来,使得等待过程不影响UI

要么还是看看有没有办法把你用的那个函数弄成非阻塞方式
opkj 2000-08-24
  • 打赏
  • 举报
回复
你可以怀疑一切,否定一切。watch dog技术几经存在了很长时间了。
Holly 2000-08-24
  • 打赏
  • 举报
回复
如果C++ Builder真的有的话,哪也真是牛了!
据我所知,直接的操作系统是没有这样的功能函数提供的,如果要提供这样的功能,必须自己在调用TerminateThread()之前强行将该线程的Heap清理掉,如果用到了其他的系统资源也要一并找出释放,否则肯定会有泄漏(资源或内存)!
我没有这样的能力写这种函数!以前的程序都是想办法在后台等待!
五行擒拿术 2000-08-21
  • 打赏
  • 举报
回复
Holly,不会吧。。为什么C++bulider,里有一个类可以呢??好象是TThread类吧。。不太记得了。。

还望高手赐教!
Holly 2000-08-21
  • 打赏
  • 举报
回复
没有办法,Only Wait !!!
否则选择泄漏内存!
还是想办法在UI上使用户不要感觉到等吧,我100%的确定!!
五行擒拿术 2000-08-21
  • 打赏
  • 举报
回复
老大。。。。你们别在设断点的问题上纠缠了。。。只有一个接收Internet文件数据的函数,等待的时间是因为Internet数据传输的问题。

要从外面杀掉最快。但有内存泄露。怎么办??
DragonCheng 2000-08-21
  • 打赏
  • 举报
回复
最好在“处理程序段”多加几个断点来尽快终止程序把
Holly 2000-08-21
  • 打赏
  • 举报
回复
你的问题只能想办法减少循环内代码的执行时间,或者多增加几个退出的检测段!
再就是避免让等待的过程直接面对用户!
Holly 2000-08-21
  • 打赏
  • 举报
回复
明确告诉你!没有办法!
五行擒拿术 2000-08-21
  • 打赏
  • 举报
回复
CWinThread??用什么函数??要实时杀呀,一杀就停!
netspirit 2000-08-21
  • 打赏
  • 举报
回复
考虑使用线程类。在主线程中了可以即时控制辅助线程的。
netspirit 2000-08-21
  • 打赏
  • 举报
回复
考虑使用线程类。在主线程中可以即时控制辅助线程的。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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