问题标签 [event-wait-handle]

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.

0 投票
2 回答
754 浏览

c# - 在 C# 中使用 autoresetevent 读取和写入文件

我写了一个简单的线程同步程序。但是当我运行这个程序时,我得到一个错误“进程无法访问文件'D:\Vivek.txt',因为它正被另一个进程使用。” 为什么我收到此错误。

当我替换代码时

该程序第一次显示相同的错误。之后它永远不会给出任何错误。请任何人告诉我错误区域,原因以及最好的解决方案。

0 投票
1 回答
1512 浏览

c# - 使用 EventWaitHandle 等待命名事件的 Windows 服务出现问题。

我目前正在使用 c# 和 .net framework 4.5 开发一个 Windows 服务,以扩展现有专有应用程序的功能,该服务阻塞在 EventWaitHandleClass ( msdn link ) 上,等待从主应用程序发出的命名事件。像这样的东西:

*:事件等待句柄安全 MSDN

现在,如果我将程序作为控制台应用程序执行,这就像一个魅力,我可以轻松地从主应用程序捕获事件并按照我的意图处理它们,但是,当我将应用程序安装为服务时,它会锁定等待这个相同的命名事件但永远不会收到信号。该服务设置为使用 NT AUTHORITY\LOCALSERVICE 帐户运行,我已经尝试使用我自己的帐户(程序在作为控制台应用程序运行时使用),但没有任何反应。

如果它有助于发起信号的应用程序在我自己的帐户下运行。感谢任何帮助,因为我是为 Windows 开发桌面应用程序的完整初学者。

0 投票
2 回答
1815 浏览

c# - EventWaitHandle 有时!跳过线程

我正在使用 VS 2012,.Net 4.5。

执行此代码(只需升级有关线程的文章中的一些示例):

我调试了几次,但通常(并非总是)得到错误的结果。起初(一次或多次)它是正确的:

但随后它只是开始跳过一个线程(首先是某个线程?第二个是某个线程):

而程序只是没有反应。几分钟后它给出了一些正确的结果,但又出错了......

此外,当我逐步调试它时,它总是正确运行。

那么,也许我应该选择另一种方法?但这看起来像我预期的那样,即使线程以随机顺序收到信号......

0 投票
2 回答
73 浏览

c# - 如果使用 EventWaitHandel,从另一个线程读取时从一个线程分配的变量是否“线程安全”?

如果我在一个线程上创建一个变量,然后使用ManualResetEvent'sWaitOne()方法阻塞,直到另一个线程为同一个变量分配一个值并发出EventWaitHandel. 当我在第一个线程上读取变量时,我能保证总是得到另一个线程刚刚分配的值吗?

(我担心由于一些优化,我无法从 CPU 缓存中获取值,因为据我所知,我没有使用任何内存屏障)。

例如

0 投票
2 回答
2397 浏览

c# - ManualResetEvent(EventWaitHandle) Set 比 WaitOne(timeout) 花费更多的 cpu

在实施 ManualResetEvent 时,有些事情让我感到惊讶,

据我了解mre.Set()命令信号并让其他进程执行。

mre.WaitOne();保持当前线路并等待信号。除此之外,如果我们将它与超时一起使用mre.WaitOne(100ms);

但!让我们假设StartCommunicate是一个线程的工作。

如果我使用waitHandle.Set();我的进程使用 ~%25 或另一个项目 ~%1 CPU 资源。

但是如果我使用 waitHandle.WaitOne(100);(超时值是象征性的。它(尝试)等待信号 100 毫秒)。

进程开始使用 ~%0 CPU 资源和waitone(timeout) 是什么意思?ThereIsAJobToExecute对我来说是Socket.HasData。那么这是否意味着对SerialPort.BytesToReadSocket.Available造成很大影响会使我们的 CPU 使用率更高?

每次点击都将线程保持 100 毫秒对我有什么副作用吗?假设一个socket程序或者一个rs232连接波特率相对新一代PC来说是很低的。

所以使用mre.WaitOne(1);对我来说似乎更可取。你怎么看待这件事 ?我正在用一些内存和性能分析器做一些实验,但我不确定我是否正在为各种客户端机器做最佳解决方案......

渴望你的评论。

提前致谢!

编辑:对于 Socket 编程,它可以工作ASYN,所以我们可以通过下面的代码轻松完成它,我们不需要轮询。

但是 RS232 COMM 端口编程我需要它。或不 ?

0 投票
1 回答
373 浏览

.net - EventWaitHandle - 多线程 = 不一致的行为

我正在尝试使用可以发送命令并接收响应的设备设置一些通信。但是,我确实想确保我控制超时标志以防止无限期的等待时间。

我做了这样的事情:

我的问题是,如果我有多个线程(本例中假设为 2)可以访问 Send 方法和以下场景:

线程 A:

线程 B:

我得到不一致的结果,即当我得到第二个命令(取消)的响应时,有时两个线程都会继续,我可以理解,但有时第一个线程会达到 30000 毫秒超时 - 我无法解释。

关于我缺少什么和/或做错了什么的任何建议?

0 投票
0 回答
25 浏览

c# - 使用 EventWaitHandle 确保具有通知的单实例应用程序

在以下使用 EventWaitHandle 确保单实例应用程序的示例中,设置 EventWaitHandleSecurity 的正确方法是什么?

特别是,我不喜欢盲目地授予所有人所有访问权限。但我无法弄清楚默认安全设置是什么,在这种情况下设置的最低权限是什么?

谢谢你。

0 投票
1 回答
249 浏览

c# - 通过 EventWaitHandle 进行的同步未按预期工作

所以基本上这是我一直在测试的代码

所以基本上你会期望 2015 写在控制台窗口中,但不,只有 15 输出。WaitOne工作正常,因为在GetNumber返回并增加结果之前,执行会停止,但之后我不知道会发生什么。如果您只是调试代码并逐步进行,一切都很好,但是如果您只是运行代码,它会输出 15。我在这里做错了吗?请不要问我为什么使用线程池而不是任务。这只是为了测试目的。

0 投票
1 回答
601 浏览

c# - 混淆 EventWaitHandle 的名称

考虑以下 MyServer 端的代码片段

从 MSDN 搜索后,ctor 的第 3 个参数表示

姓名

类型:System.String

系统范围的同步事件的名称。

但是我发现我可以多次调用CreateEvent方法并且没有任何异常,这是否意味着存在多个同名的 EventWaitHandle 实例?这是正确的行为吗?

下面是 MyClient 端的代码片段

如果在 MyServer 端调用CreateEvent 2 次,那么在 MyClient 端调用OpenEvent后会打开哪个事件?

0 投票
1 回答
545 浏览

c# - 使用事件等待句柄来阻止窗口关闭,然后包装为异步等待。可以接受吗?

我有一个窗口显示服务,带有视图调用的 CloseWindow 方法。我想在我的调用代码中创建一个阻塞方法。所以我可以在弹出窗口时阻止并允许输出从窗口返回。

这种使用手动重置是否可以接受?它或我将它与 TPL 混合的方式是否存在任何技术或设计问题?

这是那个服务

这是一些调用它的代码。