问题标签 [waithandle]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - WaitHandle 基本行为
在查看控制台时,这两个代码块是否具有相同的效果?
请注意:目前我仍在使用并绑定到 .NET 3.5。
第一的:
第二:
waitHandle 会随着每个信号而增加吗?循环会一直运行到所有信号都完成吗?或者当线程已经在工作时会忽略信号吗?
有人可以为此带来一些启示吗?
c# - 等待进程终止或停止,然后从服务重新启动
在我的 C# 应用程序中,我要求服务将持续监视进程。如果进程被某种方式或用户杀死或停止,则必须启动它。并且该服务将启动/重新启动该过程。我能够从一个进程启动一个 exe,如果该进程被用户杀死,或者有任何机会服务将重新启动该进程。但是我这里有个问题。
我是怎么做到的
我有 StartProces 里面的 AppLoader 代码,它有一个 WIn 32 APICreateProcessAsUser
这是开始这个过程。
现在,当我的服务第一次启动时,进程启动但如果我终止进程它没有启动,所以我知道我必须使用WaitForMultipleObject Win32 API
并完成它。我在 google 中查到了,但没有代码示例WaitForMultipleObject
,谁能帮我展示WaitForMultipleObject
.
谢谢
c# - 如何等待2中的第一个:一个进程和一个EventWaitHandle
我想 WaitForMultipleObjects 两种不同的类型:
- 一个“事件等待句柄”
- 一个'Process.Handle' ==> intptr
我不知道如何(以适当的方式)将“process.Handle”转换为 WaitHandle 以使以下代码正常工作:
我收到错误:
有人知道等待进程和 EventWaitHandle 的正确方法吗?
更新...我选择答案的原因。
首先感谢所有人:Jaroen、Slugart 和 Sriram。所有的答案都非常好。
- Jaroen 解决方案由于我忽略的原因在我的机器上不起作用。我的“退出”事件从未发生(也许仅在 Disposed 上?)。
- Slugart 解决方案效果很好,我在红色答案之前尝试了它。
- Sriram 解决方案效果很好,我选择了它,因为我没有创建错误的 EventWaitHandle,并且根据我的愿景似乎更干净。
十分感谢!!!
c# - 使用 WaitHandle.WaitOne
我正在尝试创建一个 Windows 服务,该服务每 5 分钟轮询一次系统并检查需要完成的某些操作。我已经阅读了WaitHandles
它们在这方面的用处,但需要了解它是如何工作的。
请参见下面的代码:
上面的代码似乎应该从我的研究中得到,但我不明白这!cancel.WaitHandle.WaitOne(interval)
部分。这如何让循环每五分钟等待一次?我需要了解这部分代码来完成我的脚本,或者知道我在使用 WaitHandle 时是否完全错误。
multithreading - 许多线程(大多数等待信号) - 大规模的性能影响?
解决争议的假设性问题。假设我有一台服务器和 1000 个活跃用户。当发生有趣的事情时,服务器将通过推送通知进行响应(这取决于每个用户。)
每个用户都可以订阅其他用户,因此当他们更新某些内容时,所有订阅的用户都会收到推送通知。
推送通知将由用户发送一个非常长的超时消息来实现,然后根据需要坐下来等待,直到服务器回复。服务器只会在发生有趣的事情时回复。
现在让我们假设拥有 1000 个对象并在它们之间触发事件是不可行的。当用户发出请求时,他将获得自己的线程,该线程执行一个循环以检查任何有趣的事情,然后等待直到适当的 WaitHandle 发出信号唤醒它并执行另一个循环。
这里的关键是让每个线程无限循环直到发生某些事情是不可行的,所以我们让它进入睡眠状态并等待信号。
如果只有大约 2-5% 的时间会发生有趣的事情 - 20-50 个活动线程随时醒来执行单个循环。将所有这些休眠线程放在那里会导致任何重大的性能问题。或者换句话说,程序是线性扩展还是指数扩展(在计算方面)?
c# - EventWaitHandle 是否必须处理虚假唤醒?
注意:我受限于 .NET 3.5,所以我不能使用ManualResetEventSlim
.
做这样的事情时,我是否必须处理虚假唤醒:
如果是这样,调用时是否设置了正确的内存屏障Set
和/或WaitOne
这样是安全的:
reallyDone
特别是,由于指令重新排序或缓存,此示例中的主线程是否可能看不到设置为 true?在这种情况下是否reallyDone
需要易变还是没有必要?
c# - 等待后读取事件参数
我有一个用于 TCP 通信的硬件组件。控制它的类有 3 个工作:触发设备、监听传入消息并在收到消息event
时引发:
此类在 a 内的循环中使用view-model
:
我所做的是触发设备并等待长达 10 秒的响应。我现在正在做的是持有一个类范围的字段,分配在事件侦听器内部接收到的消息,在循环内部读取它并清除它。
我的问题是是否有任何内置机制可以让我在EventWaitHandle
发出信号后直接读取事件参数(在事件侦听器之外)。
c# - AutoResetEvent / ManualResetEvent 消耗哪些资源?
c# ManualResetEvent和AutoResetEvent类的创建或维护成本高吗?
它们是否消耗某种有限的 Windows 内核资源,如果是,它的限制程度如何?
例如,如果我有可以每 100 毫秒创建一个新的 AutoResetEvent 的代码(稍后将被释放),我是否应该担心将旧的 AutoResetEvents 放入池中并重用它们,或者这不是一个重要的问题?
由于它们是 IDisposables,我认为它们消耗某种有限的资源。它们到底消耗了多少,我应该在什么时候开始担心使用太多?
有一个 ManualResetEventSlim,但没有 AutoResetEventSlim 的事实也让我有点担心。
c# - 等待句柄和 Xamarin 表单
我目前正在使用 Xamarin 免费试用版开发概念验证应用程序,并且遇到了一个相当有趣的小问题......这是我在可移植类库中使用的代码:
本质上,我只是想针对 Web 服务调用并获得响应,但我注意到 Xamarin 无法使用旧方法执行此操作,而GetResponse()
必须使用旧模式。嘘。BeginGetResponse()
EndGetResponse()
IAsyncResult
无论如何,我的问题是我等待之后waitHandle
的代码在回调中的代码之前执行,我不明白为什么。这正是我们等待处理的原因!
谁能发现我确信会被一个傻瓜证明是一个简单的错误?
c# - 如何使用 ManualResetEvent 替换此类中的布尔标志
我用相同的代码提出了一个先前的问题,并被建议使用ManualResetEvent
,因为这是做我想做的事情的正确方法,我同意这一点。
问题是:我已经阅读并重新阅读了有关ManualResetEvent
、WaitOne
、和方法的文档和许多教程Set
,但坦率地说,我不太了解它们应该如何使用。Unset
Reset
我的代码做了什么:它一直在寻找连接的设备,当它找到一个时,它会不断验证它是否仍然连接(否则,重新开始寻找)。这是“监控”活动,可以通过客户端代码使用Start
和Stop
方法来启动或停止。还有一个_busy
标志,因此该Stop
方法仅在一个监视周期完成后才返回。
事实是:目前 bool 标志方法不起作用,所以我想用ManualResetEvent
方法替换它,但甚至不知道如何开始。
- 我应该一对一地用 ManualResetEvents 替换标志吗?
- 应该
SearchDevices()
和MonitorDeviceConnection()
方法有条件地在同一个线程中运行,还是应该每个都有(或是)自己的线程? Start
和Stop
(打开和关闭,从客户端代码调用)和两种监视方法之间的“选择”之间的区别如何影响每个 ManualResetEvent 的使用方式?(不太确定这个问题是否有意义)- 使用枚举标志来选择两种可能的执行路径之一是一种代码味道,不是吗?
ManualResetEvent
在“上下文”中摆脱它的明智方法是什么?
这是代码: