jjzjj

autoresetevent

全部标签

c# - 使用带有 TimeSpan 的 AutoResetEvent.WaitOne 创建迭代低于 1 毫秒的循环

我正在尝试使用以8000个滴答开始的TimeSpan创建一个间隔小于1ms的循环(1个滴答=100ns,因此8000个滴答等于0.8ms或800us):privatestaticvoidMeasureAutoResetEvent(){TimeSpaninterval=newTimeSpan(8000L);//800usdoubleelapsed=0;Stopwatchwatch=newStopwatch();AutoResetEventautoResetEvent=newAutoResetEvent(false);while(true){watch.Restart();autoRese

linux - 如何使用 AutoResetEvent 从 Windows 移植到 Linux 进程间事件

我当前的Windows代码使用命名事件进行进程间通信。可以有很多进程在等待事件,当它发出信号时,所有等待的进程都被释放,然后事件返回到非信号状态。为此,我使用PulseEvent函数。我如何在Linux中执行此操作?pthread函数似乎是线程间通信。我看不出信号量在哪里可以提供与Windows相同的行为。Posix信号量似乎只释放一个等待线程。如果信号量可以释放所有等待的线程,那么就可以了。我在Linux中遗漏了什么吗? 最佳答案 看起来futex可以提供Windows事件的行为。 关

windows - 在没有 ResetEvent 的情况下调用 setEvent

如果使用setEvent设置手动重置事件但不使用ResetEvent重置,会发生什么情况;并且该事件被多次触发。即在处理事件时,再次设置事件。以下是示例任务:voidfoo(){...SetEvent(hEvent1);...}voidfoo1(){...SetEvent(hEvent2);...}intMainHandler(){...dwEvent=WaitForMultipleObjects(2,ghEvents,//arrayofobjectsFALSE,//waitforanyobject5000);switch(dwEvent){casehEvent1://dosometh

c# - AutoResetEvent 和 Mutex 有什么区别

我对这些概念很陌生。但是随着我对threading的深入了解,我感到很困惑。mutex、semaphore相对于autoresetevent有什么意义。我通过研究了解到的唯一区别是mutex可以执行跨进程操作。如果是这种情况,为什么它没有与Set、Reset、WaitOne相同的方法。我们能否用mutex替换AutoResetEvent,反之亦然?请解开这个谜题。 最佳答案 不同的概念-Mutex是一个独占token;只有一个人可以拥有它;当他们释放它时,其他人可以争夺它。AutoResetEvent是一个门,在关闭前只允许一个人通

c# - 如何取消阻塞已调用 AutoResetEvent 对象上的 WaitOne 方法的线程?

下面是一个具有方法“SomeMethod”的类,它说明了我的问题。classSomeClass{AutoResetEventtheEvent=newAutoResetEvent(false);//morememberdeclarationspublicvoidSomeMethod(){//somecodetheEvent.WaitOne();//morecode}}该方法被设计成线程安全的,会在不同的线程中被调用。现在我的问题是,如何才能取消阻塞在任何时间点对“theEvent”对象调用“WaitOne”方法的所有线程?这个需求在我的设计中经常出现,因为我需要能够优雅地停止和启动我的多

c# - AutoResetEvent 与 bool 值停止线程

我在工作线程中有一个对象,我可以指示它停止运行。我可以使用bool或AutoResetEvent来实现:bool值:privatevolatilebool_isRunning;publicvoidRun(){while(_isRunning){doWork();Thread.Sleep(1000);}}自动重置事件:privateAutoResetEvent_stop;publicvoidRun(){do{doWork();}while(!_stop.WaitOne(1000));}然后Stop()方法会将_isRunning设置为false,或调用_stop.Set()。除了Auto

c# - 如何在 C# 中创建命名的 autoresetevent?

我需要使用命名事件同步两个应用程序。但是AutoResetEvent和ManualResetEvent都不包含带有事件名称的构造函数(仅初始状态)。我可以通过AutoResetEvent或ManualResetEvent类中的静态方法OpenExisting打开现有命名事件,但无法创建它!我不想为其使用nativeWinAPICreateEvent函数,除非我确切地知道不存在其他方法。 最佳答案 我自己找到了解决办法。即:EventWaitHandlehandle=newEventWaitHandle(false,EventRese

c# - Try/Catch 和线程

我知道为什么,但我想问一下是否有人很好地理解为什么线程内引发的异常从未被启动它的代码捕获。下面是一些非常简单的代码来演示我的意思:usingSystem;usingSystem.Collections.Generic;usingSystem.Threading;namespaceTestCrash{classProgram{privatestaticvoidCrash(objectcontrol){AutoResetEventare=(AutoResetEvent)(((object[])control)[0]);are.Set();thrownewException("Burnbab

c# - 使用进程间同步对象同步 2 个进程 - Mutex 或 AutoResetEvent

考虑以下场景:我正在运行我的应用程序,该应用程序在执行期间必须运行另一个进程,并且只有在第二个进程完成内部特定初始化之后,我的第一个进程才能继续。例如:...//Process1codedoesvariousinitializationshereProcess.Start("Process2.exe");//WaituntilProcess2finishesitsinitializationandonlythencontinue(Process2doesn'texit)...我看到几个选项:Mutex-在考虑进程间通信时会自动想到Mutex,但是,我看不出有什么方法可以让Process

c# - C# 中的新 AutoResetEvent (true) 用法?

我在想,为什么我想在AutoResetEvent的构造函数中传递一个true?我创建了一个waitHandle,这样调用WaitOne()的任何人实际上都会等待。如果我用true实例化它,就好像它立即收到信号一样-这就像正常流程一样,无需等待。EventWaitHandle_waitHandle=newAutoResetEvent(false);voidMain(){newThread(Waiter).Start();Thread.Sleep(1000);_waitHandle.Set();Console.ReadLine();}voidWaiter(){Console.WriteLi