打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
autoEvent.WaitOne(1000,true)第二个参数啥作用啊,有高手知道吗?
在大部分情况下那个参数是没有用的。

只有在使用ContextBoundObject来进行同步的时候,那个参数才有用。

1、Synchronization可以用来同步一个类(基于ContextBoundObject)。
比如以下的例子,同一时间只能运行一个方法A。把标志行1注释掉,则可观察到乱序执行。

2、WaitOne(...,true)使得方法B可以暂时脱离ContextBound同步保护,让A有机会在B等待的时候得到执行。比如以下的例子的结果为:
...
Start B
Start A
End   A
End   B 
把标志行2的true改成false,那么A就要等到B执行后才能执行。

C# code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 
34
using System;
using System.Threading;
[System.Runtime.Remoting.Contexts.Synchronization(true)]   // 1
class My : ContextBoundObject
{
    static void Main(string[] args)
    {
        My my = new My();
        ThreadPool.QueueUserWorkItem(my.FuncA);
        Thread.Sleep(50);
        ThreadPool.QueueUserWorkItem(my.FuncA);
        Thread.Sleep(50);
        ThreadPool.QueueUserWorkItem(my.FuncB);
        Thread.Sleep(50);
        ThreadPool.QueueUserWorkItem(my.FuncA);
        Console.ReadLine();
    }
    AutoResetEvent myEvent = new AutoResetEvent(false);
    public void FuncA(object state)
    {
        Console.WriteLine("Start A");
        System.Threading.Thread.Sleep(2000);
        Console.WriteLine("End   A");
    }
    public void FuncB(object state)
    {
        Console.WriteLine("Start B");
        myEvent.WaitOne(10 * 1000, true);                // 2
        Console.WriteLine("End   B");
    }
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
多线程之旅(ThreadPool 线程池)
多线程编程笔记(二) - 流浪者的专栏
浅谈线程池(下):相关试验及注意事项 - 老赵点滴 - 追求编程之美 - 博客园
C#多线程学习 之 线程池[ThreadPool]
.NET 线程池编程技术
线程池之ThreadPool类与辅助线程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服