问题标签 [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.
c# - 在 C# 中使用 autoresetevent 读取和写入文件
我写了一个简单的线程同步程序。但是当我运行这个程序时,我得到一个错误“进程无法访问文件'D:\Vivek.txt',因为它正被另一个进程使用。” 为什么我收到此错误。
当我替换代码时
至
该程序第一次显示相同的错误。之后它永远不会给出任何错误。请任何人告诉我错误区域,原因以及最好的解决方案。
c# - 使用 EventWaitHandle 等待命名事件的 Windows 服务出现问题。
我目前正在使用 c# 和 .net framework 4.5 开发一个 Windows 服务,以扩展现有专有应用程序的功能,该服务阻塞在 EventWaitHandleClass ( msdn link ) 上,等待从主应用程序发出的命名事件。像这样的东西:
现在,如果我将程序作为控制台应用程序执行,这就像一个魅力,我可以轻松地从主应用程序捕获事件并按照我的意图处理它们,但是,当我将应用程序安装为服务时,它会锁定等待这个相同的命名事件但永远不会收到信号。该服务设置为使用 NT AUTHORITY\LOCALSERVICE 帐户运行,我已经尝试使用我自己的帐户(程序在作为控制台应用程序运行时使用),但没有任何反应。
如果它有助于发起信号的应用程序在我自己的帐户下运行。感谢任何帮助,因为我是为 Windows 开发桌面应用程序的完整初学者。
c# - EventWaitHandle 有时!跳过线程
我正在使用 VS 2012,.Net 4.5。
执行此代码(只需升级有关线程的文章中的一些示例):
我调试了几次,但通常(并非总是)得到错误的结果。起初(一次或多次)它是正确的:
但随后它只是开始跳过一个线程(首先是某个线程?第二个是某个线程):
而程序只是没有反应。几分钟后它给出了一些正确的结果,但又出错了......
此外,当我逐步调试它时,它总是正确运行。
那么,也许我应该选择另一种方法?但这看起来像我预期的那样,即使线程以随机顺序收到信号......
c# - 如果使用 EventWaitHandel,从另一个线程读取时从一个线程分配的变量是否“线程安全”?
如果我在一个线程上创建一个变量,然后使用ManualResetEvent
'sWaitOne()
方法阻塞,直到另一个线程为同一个变量分配一个值并发出EventWaitHandel
. 当我在第一个线程上读取变量时,我能保证总是得到另一个线程刚刚分配的值吗?
(我担心由于一些优化,我无法从 CPU 缓存中获取值,因为据我所知,我没有使用任何内存屏障)。
例如
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.BytesToRead或Socket.Available造成很大影响会使我们的 CPU 使用率更高?
每次点击都将线程保持 100 毫秒对我有什么副作用吗?假设一个socket程序或者一个rs232连接波特率相对新一代PC来说是很低的。
所以使用mre.WaitOne(1);
对我来说似乎更可取。你怎么看待这件事 ?我正在用一些内存和性能分析器做一些实验,但我不确定我是否正在为各种客户端机器做最佳解决方案......
渴望你的评论。
提前致谢!
编辑:对于 Socket 编程,它可以工作ASYN
,所以我们可以通过下面的代码轻松完成它,我们不需要轮询。
但是 RS232 COMM 端口编程我需要它。或不 ?
.net - EventWaitHandle - 多线程 = 不一致的行为
我正在尝试使用可以发送命令并接收响应的设备设置一些通信。但是,我确实想确保我控制超时标志以防止无限期的等待时间。
我做了这样的事情:
我的问题是,如果我有多个线程(本例中假设为 2)可以访问 Send 方法和以下场景:
线程 A:
线程 B:
我得到不一致的结果,即当我得到第二个命令(取消)的响应时,有时两个线程都会继续,我可以理解,但有时第一个线程会达到 30000 毫秒超时 - 我无法解释。
关于我缺少什么和/或做错了什么的任何建议?
c# - 使用 EventWaitHandle 确保具有通知的单实例应用程序
在以下使用 EventWaitHandle 确保单实例应用程序的示例中,设置 EventWaitHandleSecurity 的正确方法是什么?
特别是,我不喜欢盲目地授予所有人所有访问权限。但我无法弄清楚默认安全设置是什么,在这种情况下设置的最低权限是什么?
谢谢你。
c# - 通过 EventWaitHandle 进行的同步未按预期工作
所以基本上这是我一直在测试的代码
所以基本上你会期望 2015 写在控制台窗口中,但不,只有 15 输出。WaitOne
工作正常,因为在GetNumber
返回并增加结果之前,执行会停止,但之后我不知道会发生什么。如果您只是调试代码并逐步进行,一切都很好,但是如果您只是运行代码,它会输出 15。我在这里做错了吗?请不要问我为什么使用线程池而不是任务。这只是为了测试目的。
c# - 混淆 EventWaitHandle 的名称
考虑以下 MyServer 端的代码片段
从 MSDN 搜索后,ctor 的第 3 个参数表示
姓名
类型:System.String
系统范围的同步事件的名称。
但是我发现我可以多次调用CreateEvent方法并且没有任何异常,这是否意味着存在多个同名的 EventWaitHandle 实例?这是正确的行为吗?
下面是 MyClient 端的代码片段
如果在 MyServer 端调用CreateEvent 2 次,那么在 MyClient 端调用OpenEvent后会打开哪个事件?
c# - 使用事件等待句柄来阻止窗口关闭,然后包装为异步等待。可以接受吗?
我有一个窗口显示服务,带有视图调用的 CloseWindow 方法。我想在我的调用代码中创建一个阻塞方法。所以我可以在弹出窗口时阻止并允许输出从窗口返回。
这种使用手动重置是否可以接受?它或我将它与 TPL 混合的方式是否存在任何技术或设计问题?
这是那个服务
这是一些调用它的代码。