问题标签 [autoresetevent]

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 投票
3 回答
6063 浏览

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

我在想 ,

为什么我想true在 ctor 中传递 a AutoResetEvent

我创建了一个waitHandle,以便任何会打电话WaitOne()的人都会等待

如果我用 a 实例化它true,就好像它被立即发出信号一样——这就像一个没有等待的正常流程。

输出 :

更改为 : EventWaitHandle _waitHandle = new AutoResetEvent (true);输出将是 :

问题

  • 我为什么要这样做?(通过true)?
0 投票
1 回答
869 浏览

c# - 在 NativeWindow 中等待消息

我正在尝试做的是WM_TIMER在我的进程中的窗口上捕获并等待消息(尽管我无法控制)。

我正在尝试使用 anAutoResetEvent来等待消息。

WaitForMaterialUpdate方法将 连接NativeWindow到窗口,并阻塞直到收到消息。

这是我正在使用的代码:

我不是在一个非常可调试的环境中,但我已经确认使用MessageBox该窗口实际上WM_TIMER在等待期间接收消息,但WaitOne总是在返回之前等待完整的 5000 毫秒超时时间。

知道我哪里出错了吗?

0 投票
2 回答
574 浏览

windows - 如何判断 Windows 内核事件对象是自动重置还是手动重置?

Windows 允许创建(命名的)事件对象

Event(Windows 中的同步原语)可以是 auto-reset 类型(在这种情况下,您可以说它是一种 semaphore),也可以是 manual-reset 类型,在这种情况下,它会一直保持设置,直到有人重置它。

现在,从CreateEventOpenEventSetEvent等的文档看来,一旦创建了事件,似乎无法确定它是自动重置还是手动重置。

我的情况是,一个进程创建了一个命名事件,而第二个进程必须对该事件进行操作(它传递了名称,然后打开事件并最终发出信号)。由于该事件应该始终是一个手动重置事件以使整个事情变得有意义,我希望在第二个过程中添加一个检查以确保它一个手动重置事件。有没有办法检查这个?

(是的,在我的情况下它更像是一个不错的选择,因为如果任何代码会创建一个自动重置事件然后将其传递给这个进程,这将是一个错误。但是错误发生了,如果我可以检测到它们。)

0 投票
1 回答
679 浏览

vb.net - 为什么 AutoResetEvent 会导致内存错误?

下面,您将找到我最新的编码心痛的来源。它是基类中的一个小方法,在辅助线程中运行派生类的方法。此代码在每 5 分钟启动一次的 Windows 服务中运行大约 5 次。

它会运行一段时间。最终它会耗尽内存。从那时起,将引发内存错误,直到服务重新启动。实际抛出的错误的文本如下:

直到我开始使用 AutoResetEvent 来控制我的 while 循环,这些错误才真正开始发生。我曾经使用 System.Threading.Thread.Sleep。但是,当我使用 sleep 方法时,我调用的 com 对象之一永远不会运行。更改为 AutoResetEvent 可以运行该代码,但是即使调用 com 对象的方法不是要运行的派生类之一,现在也会显示内存错误。

请帮忙。:)

0 投票
1 回答
19373 浏览

c# - 使用 AutoResetEvent 同步两个线程

我正在尝试实施AutoResetEvent. 为此,我使用了一个非常简单的类:

但这不起作用。用法似乎非常简单,所以如果有人能够告诉我哪里出了问题以及我在这里实现的逻辑问题出在哪里,我将不胜感激。

0 投票
2 回答
893 浏览

c# - 在 AutoResetEvent.WaitOne() 时渲染用户控件

也许这是一个不好的问题,但我有一个客户端应用程序,它向服务器发送一些命令。我做了一个发送命令的小函数,它只是等到收到消息AutoResetEvent.WaitOne(),然后将消息作为字符串返回。我经常在我的客户端应用程序中使用此功能,因为它是实现某事的快速方法。

现在我想在这个应用程序中显示一个 LoadingCircle,同时它正在等待来自服务器的响应。我已经在消息接收函数中为此写了一些东西,它只是将控件添加到表单中。这是有效的发现,但是在几毫秒后重绘的 UserControl(Loading Circle) 不再重绘,因为AutoResetEvent.WaitOne()正在阻止 GUI 线程。我知道我可以将消息接收部分移动到另一个线程中,但是我不想改变这个函数的概念,因为我使用了超过150x的消息接收函数。

所以我的问题是:有没有一种懒惰的方法来做到这一点,以便它在等待时执行 GUI 事件,或者我可以将 LoadingCircle 控件的绘图部分移动到另一个线程中?

任何帮助将不胜感激

0 投票
3 回答
3202 浏览

c# - 从不同的线程调用方法 AutoResetEvent 是否安全?

从不同的线程调用方法 AutoResetEvent 是否安全?或者我应该避免从不同线程调用对象?

0 投票
2 回答
3225 浏览

c# - 如何最好地处理因 AutoResetEvent.WaitOne() 而处于休眠状态的线程

我有一个 Windows 服务,它以 5 个线程之一发送电子邮件(这样做是为了提高服务发送电子邮件的速度):

我有一种Queue方法可以将一条或多条新消息添加到 messageQueue 并调用block.Set(),以便 5 个线程之一可以发送消息。当允许其中一个线程运行时,只要队列中有消息,block.Set()就会调用,以便下一条消息可以出队,并且 5 个线程中的另一个将工作发送它。以此类推,直到队列为空。这一切正常。

但是,当我处理我的对象时,我设置了处理变量,然后为每个线程:

大多数情况下,线程由于 s 而处于休眠状态block.WaitOne,因此上面的代码中止了线程。但是,这会导致记录线程中止异常。我可以将线程中止异常与其他异常分开捕获并选择不记录,但这似乎不是很干净。

在不导致过多日志记录的情况下清理这些线程的最佳方法是什么?

更新:

我已将以上内容更改为:

谢谢您的帮助。

0 投票
3 回答
64 浏览

c# - 确定当前执行的方法

假设以下代码

问题

有没有办法“捕获” CLR 事件,无论是来自我线程中的事件还是循环?

为什么

我不想在软件的内部编写调用挂钩,这是一个可观察到的问题(嗯,想法来了……)(它实际上观察了自动化类型功能的 UI 调用模式)。

0 投票
3 回答
135 浏览

c# - 如何重现无限期阻塞的线程之一(按照邮政编码)?

我试图理解这个问题(以及分别的答案):

附上以下代码

代码中的注释告诉:

但我不明白任何线程如何以及为什么可以无限期地阻塞......
我试图运行代码并且我没有观察到任何无限期的阻塞......

我在这个问题(以及相应的答案)中错过了什么?

更新:
我将此代码启动为:

而且我没有观察到任何无限期的阻塞。

这是运行代码的输出:

我应该如何运行(更新、更改、增加)代码以重现所讨论的主题(让一个线程被无限期阻塞)?