线程WaitOne方法Set方法

AutoResetEvent 有两种状态 一种终止状态,另一种 非终止状态

构造函数有个bool参数,true 是终止, false 是非终止

 WaitOne 是用来等待的,如果AutoResetEvent 处于 非终止状态 那么会一直等待,直至调用 Set

如果是终止状态 ,那么不会阻塞 会继续

调用 Set 就是告知 我的工作完成了,我现在可以走了 ,大家久等了.

 

 

线程阻塞成立的一对条件:
1.线程中包含waitone();
2.AutoResetEvent(bool)的bool为false,即事件状态为非终止状态;

set()方法是将事件状态设置为终止状态(其实就是破坏第2个条件),允许一个或多个等待线程继续。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中,可以使用 ManualResetEvent 类来让创建的线程等待。ManualResetEvent 类是一个同步辅助类,可以用来协调多个线程之间的操作。 以下是一个示例: ``` ManualResetEvent waitHandle = new ManualResetEvent(false); // 初始状态为非终止状态 Thread t = new Thread(() => { // 线程的代码 waitHandle.Set(); // 通知主线程线程执行完成 }); t.Start(); // 启动新线程 waitHandle.WaitOne(); // 等待线程执行完成 ``` 在上面的示例中,我们创建了一个 ManualResetEvent 对象 waitHandle,并将它的初始状态设置为非终止状态(即 false)。然后,我们创建了一个新线程,并使用 Start 方法启动它。在新线程中,当线程执行完成时,我们调用 waitHandle 的 Set 方法来将它的状态设置为终止状态(即 true)。 在主线程中,我们调用 waitHandle 的 WaitOne 方法来等待线程执行完成。当 waitHandle 的状态为终止状态时,WaitOne 方法就会返回,程序继续执行。如果 waitHandle 的状态在超时时间内仍然为非终止状态,WaitOne 方法就会抛出一个 TimeoutException 异常。 需要注意的是,如果创建的线程永远不会执行完成,那么主线程就会一直等待。因此,建议在使用 ManualResetEvent 类时,要设置一个超时时间,以避免出现死锁的情况。可以使用 WaitOne 方法的重载版本来指定超时时间,例如: ``` waitHandle.WaitOne(1000); // 等待线程执行完成,最多等待 1000 毫秒 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值