作者toki (いまがその时だ)
看板C_Sharp
标题Re: [问题] C# thread suspend、resume过时
时间Wed May 19 22:58:40 2010
※ 引述《carl71321 (Christopher)》之铭言:
: MSDN上标示Thread的Suspend()、Resume()方法
: 目前已经过时了,如果在C#内想要去让某一个使用了很多
: CPU时间的Thread暂停,待加权计算此Thread可再使用CPU
: 时间後再启动此Thread,请问可以怎麽处理呢?谢谢。
正式做法: WaitHandle / AutoResetEvent / ManualResetEvent
// AutoResetEvent,必需要在你的工作 thread 和加权计算 thread 都存取的到
AutoResetEvent e = new AutoResetEvent(false);
----------------------------------
// Work thread 会长这样
while (true)
{
// 这行会让 Thread 执行到这时停下来等 e 被触发才继续
e.WaitOne();
// e 被触发後会继续执行到这,开始真正进行工作
DoWork();
}
-----------------------------------
// 从你的加权 thread 触发 e 这个 event,就可以让 worker thread 开始活动
if (CanWork)
e.Set();
-----------------------------------
不过,有经验的人看到上面的 while loop 应该会觉得有点问题
因为.....最後除了用 Thread.Abort() 外,你没办法把Thread停下来
解决的方法很多种,简单的例如插个 flag 在每次要开始工作前检查一下
比较正式一点的解法则是善用 WaitHandle.WaitAny() 这个 function
让 while loop 里的 wait 同时等多个 signal,并且把其中一个当做 quit 的讯号使用
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.72.1