※ 引述《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