会员
众包
新闻
博问
闪存
云市场
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
.NET彩虹天堂
.NET,Javascript,Ajax相关技术
博客园
首页
新随笔
联系
订阅
管理
.Net的线程同步方法一:ManualResetEvent
ManualResetEvent的使用,Socket中有用到
class
Program
{
/**/
///
<summary>
///
ManualResetEvent建立时是把false作为start的初始状态,这个类用于通知另一个线程,让它等待一个或多个线程。
///
如这个例子中,等待线程thread1线程调用mre.WaitOne(), 用于发信号的线程调用mre.Set().
///
</summary>
public
static
ManualResetEvent mre
=
new
ManualResetEvent(
false
);
public
static
void
trmain()
{
Thread tr
=
Thread.CurrentThread;
Console.WriteLine(tr.Name
+
"
开始第一波等待
"
);
mre.WaitOne();
//
等到什么时候呢?等到mre.Set()被调用
Console.WriteLine(tr.Name
+
"
第一波启动t
"
);
mre.Reset();
//
再次重置
Console.WriteLine(tr.Name
+
"
开始第二波等待
"
);
mre.WaitOne();
//
再次等待
Console.WriteLine(tr.Name
+
"
第二波启动
"
);
for
(
int
x
=
0
; x
<
10
; x
++
)
{
Thread.Sleep(
1000
);
Console.WriteLine(tr.Name
+
"
:
"
+
x);
}
}
static
void
Main(
string
[] args)
{
Thread thrd1
=
new
Thread(
new
ThreadStart(trmain));
thrd1.Name
=
"
thread1
"
;
thrd1.Start();
Thread thrd2
=
new
Thread(
new
ThreadStart(trmain));
thrd2.Name
=
"
thread2
"
;
thrd2.Start();
for
(
int
x
=
0
; x
<
10
; x
++
)
{
Thread.Sleep(
900
);
Console.WriteLine(
"
Main :
"
+
x);
if
(
5
==
x)
{
mre.Set();
//
子线程的mre.WaitOne()可以执行了。第一次等待进程
//
;
//
如果什么都不做呢,mre.Wait()那个线程就一直等在那里了?
}
}
while
(thrd1.IsAlive)
{
Thread.Sleep(
1000
);
Console.WriteLine(
"
Main: waiting for thread to stop
"
);
mre.Set();
//
第二次通知等待进程
}
}
}
posted @
2008-07-07 16:03
眼里进了砂
阅读(
276
) 评论(
0
)
编辑
收藏
举报
指间灵动,快码加编
刷新页面
返回顶部
公告