begin thread 如何在线程外部中止线程? ( 积分: 30 )

  • 主题发起人 liangbowen
  • 开始时间
L

liangbowen

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,据我所知只有线程返回或使用_endthread.
但我确实需要在线程外部中止线程。
事情是这样的,我在线程里创建了一个socket,在监听。我希望可以控制在任何时候把socket和线程关掉。或者过一个timeout的时间(比如5秒)后把线程和socket关掉。
只有47分了
 
如题,据我所知只有线程返回或使用_endthread.
但我确实需要在线程外部中止线程。
事情是这样的,我在线程里创建了一个socket,在监听。我希望可以控制在任何时候把socket和线程关掉。或者过一个timeout的时间(比如5秒)后把线程和socket关掉。
只有47分了
 
试试Windows的API,TerminateThread,应该可以关闭线程的。
 
TerminateThread不能用于_begin
thread创建的线程。会有内存溢出。
 
使用事件,在线程内监控事件,外部触发事件。
 
我也想过,不过socket的监听本身就是个阻塞,我没办法再监控外部变量。除非再建一个线程,那是不可能的。
 
可以在线程里,作个标志,根据标志,来确定线程要不要执行
 
你说的跟TYZhang说的一样。所以我的回答也是像回答TYZhang的一样。
 
哦,我理解错TYZhang的了,因为我从没想过在线称内部可以建立事件被外部调用的。等等,我试试TYZhang的看。
TYZhang可以把实现方法说的详细些吗?
 
问题似乎变成如何调用线程内部事件了。。
 
1、在线程外用createevent创建一个事件作为参数带入线程;
2、在线程中用WaitForMultipleObjects监控socket事件与你在线程中创建的事件;
3、如果要中止线程对创建的事件进行SetEvent;
4、线程中的WaitForMultipleObjects函数监控到事件,退出线程。
 
谢谢cTYZhang
 
顶部