首页 > 编程知识 正文

化学元素,英语单词

时间:2023-05-06 16:46:33 阅读:119109 作者:2984

简单介绍

可以通过调用ManualResetEvent对象的WaitOne方法使多个线程处于等待状态或阻止状态。 当控制线程调用Set ()方法时,所有等待线程都将恢复并继续执行。

ManualResetEvent的工作方式是在内存中保留bool值,如果bool值为False,则阻止所有线程;相反,如果bool值为True,则取消阻止所有线程。 创建ManualResetEvent对象的实例时,在函数构造函数中传递默认的bool值。 以下是ManualResetEvent实例化的示例:

1

manualreseteventmanualresetevent=newmanualresetevent (false;

上面的代码初始化了值为False的ManualReSetEvent对象。 也就是说,调用WaitOne放置的所有线程都将被阻止,直到有线程调用set )方法。 使用值True初始化ManualResetEvent对象可以执行后续操作,而不会阻止调用WaitOne方法的所有线程。

WaitOne方法此方法阻止当前线程,并等待其他线程发送信号。 收到信号后,返回True,相反返回False。 此方法的调用方法如下所示。

1

manualResetEvent.WaitOne (;

在WaitOne方法的第二个重载版本中,可以指定当前线程等待信号的时间间隔。 如果在时间间隔内没有收到信号,该方法将返回False并继续执行。 以下代码显示了具有时间间隔参数的WaitOne调用。

1

boolissignalled=manualresetevent.wait one (timespan.from seconds (5) );

指定5秒作为WaitOne方法的参数。 如果manualResetEvent对象在5秒钟内收到信号,则将isSignalled分配给False。

Set方法此方法用于向所有等待线程发送信号。 Set ) )方法的调用使ManualResetEvent对象的bool变量的值为True,以释放所有线程并继续执行。 以下是调用的示例:

1

manualResetEvent.Set (;

ReSet方法ManualResetEvent对象的set (调用方法时,其bool值为true,可以调用ReSet )方法重置值。 Reset )方法将值重置为False。 以下是调用Reset方法的示例。

1

manualResetEvent.Reset (;

如果要多次发送信号,则必须在调用Set (方法后立即调用Reset )方法。

ManualResetEvent示例下的示例说明如何使用ManualResetEvent释放多个线程。 使用false值实例化了ManualResetEvent对象。 这将阻止调用WaitOne方法的所有线程。 方法调用GetDataFromServer,创建了两个以服务器数为参数的线程。

调用WaitOne方法获取第一个批处理数后,两个线程都将等待调用WaitOne线程的信号。 当控制线程调用manualrestEvent对象的Set方法时,两个线程都将释放并继续执行。 调用Set方法后立即调用了Reset方法,并将manualrestEvent对象的bool值更改为false。 所以,如果线程再次调用WaitOne方法,他们仍然会被阻止。

从服务中检索第二次数据后,两个线程都调用了WaitOne方法。 2秒钟后,控制线程再次调用Set方法释放两个线程。

类程序{ staticmanualreseteventmanualresetevent=newmanualresetevent (false ); staticvoidmain(string[]args ) { task task=task.factory.start new ()={ GetDataFromServer(1) }1); ); Task.Factory.StartNew ()={ GetDataFromServer(2) } 2; ); //sendfirstsignaltogetfirstsetofdatafromserver1and server2manualresetevent.set (; manualResetEvent.Reset (; thread.sleep (timespan.from seconds (2) ); //sendsecondsignaltogetsecondsetofdatafromserver1and server2manualresetevent.set (; 控制台. readline (;/* result * igetfirstdatafromserver1* igetfirstdatafromserver2* igetseconddatafromserver1* igetseconddddatafromser2* all allthedatacollectedfromserver1*/} staticvoidgetdatafromserver (intservernumber )/callinganywebservicetogetdataconsole. manualResetEvent.WaitOne (; thread.sleep (timespan.from seconds (2) ); console.writeline (igetseconddatafromserver ' server number ); manualResetEvent.WaitOne (; console.writeline (allthedatacollectedfromserver ' server number ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。