作者cloudrick (Rick)
看板C_Sharp
标题Re: [问题] Thread 与 Class 一问...
时间Fri Nov 16 03:40:15 2007
※ 引述《KENyroj (难得一身鸡蛋糕...)》之铭言:
: ※ 引述《WayneChu (台北人在洛城)》之铭言:
: : 不论Abort/Interrupt都不建议使用
: : 你的DoThing里面应该是个无穷回圈吧?
: : 自己想办法从回圈里跳出来
: : 比如由另一个执行绪设个旗标或AutoResetEvent/ManualResetEvent之类
: : DoThing函式结束thread也就跟着结束
: : 这是唯一安全结束执行绪的方法
: 谢谢大大的指教... 我在这方面的实作上碰到了盲点...
: 如同大大所言, 我在这个包含了 Thread 的 class 里写了个 public 的 bool IsStop;
: 然後在 DoThing 的 method 里写的就是 while(!IsStop) { ... }
^^^^^^^^^^^^^^
在存取共享变数时,请加上atomic叙述 (例如mutex或lock ...)
: 然後这个 ThreadClass 定义了个Stop()方法, 目前的做法就是 IsStop = false;
: 但是这样一来产生了一个问题... 因为其实 while 里面是一个 server物件 的 Listen
: 程式检查过一次 IsStop 是 false 後, 就让那个 Server 物件去 Listen...
: 在这其间, IsStop 若有任何变更, 其实 Server物件不会停止 Listen
: 要等它 Listen 完後, 要再一次开始Listen 时才会去检查那个 IsStop...
: 不知有没有其它作法, 还是我的做法有什麽地方可以改进的 ^^"
想办法让你这个 "Listen" 不要卡住
不晓得你的server是怎麽实作 (应该是 Socket 吧? )
在 Socket 里的 Listen() 是不会卡住的 , Accept() 才会
所以建议把 Accept() 改用非同步的 BeginAccept()
如此一来 就不会卡住了
不晓得有没有误会你的意思
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.223.237