C#学习教程:暂停/恢复与AutoResetEvent相关的线程分享


暂停/恢复与AutoResetEvent相关的线程

在这段代码中,我想使用AutoResetEvent和bool变量暂停/恢复一个线程。 如果阻塞== true,是否可以每次暂停不进行测试(在for循环中工作())? 测试“阻塞”变量也需要锁定,我认为这是耗时的。

class MyClass { AutoResetEvent wait_handle = new AutoResetEvent(); bool blocked = false; void Start() { Thread thread = new Thread(Work); thread.Start(); } void Pause() { blocked = true; } void Resume() { blocked = false; wait_handle.Set(); } private void Work() { for(int i = 0; i < 1000000; i++) { if(blocked) wait_handle.WaitOne(); Console.WriteLine(i); } } } 

是的,您可以使用ManualResetEvent来避免您正在执行的测试。

只要“设置”(发出信号), ManualResetEvent就会让你的线程通过,但与之前的AutoResetEvent不同,它不会在线程通过时自动重置。 这意味着您可以将其设置为允许在循环中工作,并可以将其重置为暂停:

上述就是C#学习教程:暂停/恢复与AutoResetEvent相关的线程分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

 class MyClass { // set the reset event to be signalled initially, thus allowing work until pause is called. ManualResetEvent wait_handle = new ManualResetEvent (true); void Start() { Thread thread = new Thread(Work); thread.Start(); } void Pause() { wait_handle.Reset(); } void Resume() { wait_handle.Set(); } private void Work() { for(int i = 0; i < 1000000; i++) { // as long as this wait handle is set, this loop will execute. // as soon as it is reset, the loop will stop executing and block here. wait_handle.WaitOne(); Console.WriteLine(i); } } } 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1269805.html

(0)
上一篇 1天前
下一篇 1天前

精彩推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注