问题标签 [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 回答
737 浏览

c# - 在 Visual Studio 2010 中运行单元测试时过早发出 AutoResetEvent 信号

我在 VS2010 中运行 MS 单元测试来测试我的多线程应用程序。

应用程序使用 anAutoResetEvent来同步线程,它的声明如下:


主测试线程(ID:13)

主测试线程启动一个线程来解析一个捕获文件,然后调用WaitOne()一个AutoResetEvent,阻塞直到捕获完成:

旁注:代码最初调用了captureParsedEvent.Reset()afterWaitOne()但我在调查此问题时删除了它,因为我的研究得出结论,这对于AutoResetEvent对象可能不是必需的。)

解析线程(ID:18)

同时,进行解析的线程发出这样的信号AutoResetEvent


通常,一切都运行良好,我在输出窗口中看到以下预期输出:

但是,我间歇性地看到以下输出:

这显然给我带来了问题,因为捕获还没有真正完成解析。

上面的地方是唯一发生的,captureParsedEvent.Set();所以我知道没有其他人在发出这个事件的信号。

几个问题:

  1. Trace.WriteLine()线程安全并以正确的顺序输出跟踪吗?

  2. 我只在 VS2010 中运行单元测试时才看到这个问题——并行运行的测试是否有一些有趣的事情发生,并且在这种情况下使用线程可能会导致问题?我的理解是测试是串行运行的,但不确定这是否正确。

0 投票
3 回答
588 浏览

c# - AutoresetEvent 和 Singleton 问题

有人可以告诉我以下代码有什么问题吗?理想情况下,它应该首先启动一个线程,然后等待设置事件。相反,它不会启动线程,只会卡在 WaitOne() 上。

我很想知道线程发生了什么,为什么?

编辑: 到目前为止,@BrokenGlass 提供的描述是有道理的。但是将代码更改为以下代码允许另一个线程可以访问实例方法而无需完成构造函数。(@NicoSchertler 建议)。

0 投票
1 回答
569 浏览

c# - AutoResetEvent 导致多线程 UCMA 3.0 应用程序中的死锁

在我的 Parallel.Foreach 循环中,我正在调用

_helper 是 UserEndPoint 和所有其他操作(如订阅)的封装类

订阅方法是:

等待_contactSubscribeCompleted.WaitOne()时的线程死锁;有什么方法可以避免这种死锁争用?

干杯,

PS:可能发生死锁的一个原因是 AutoResetEvent 的固有问题——从文档中——“不能保证每次调用 Set 方法都会释放一个线程。如果两个调用靠得太近,这样第二次调用在线程被释放之前发生,只有一个线程被释放。就好像第二次调用没有发生一样。另外,如果在没有线程等待并且已经发出 AutoResetEvent 信号时调用 Set,则通话无效。” 有解决方法吗?

0 投票
1 回答
192 浏览

c# - 在 C# 中模拟等待句柄?

我们可以使用WaitandPulse来模拟 aManualResetEvent如下:

代码 #1

美好的

现在让我们谈谈将其增强为AutoREsetEvent

只需用AutoResetEvent以下代码替换代码WaitOne

代码 #2

并在方法中替换PulseAll为:PulseSet

代码#3

问题是:在代码 #2 处,行_signal = false;

为什么有必要?Pulse只会达到1 个等待句柄,我知道AutoREsetEvent这只会让一个被阻止的物品通过并自动关闭大门。

那么为什么_signal = false需要写作呢?.

0 投票
2 回答
5986 浏览

.net - 检查 AutoResetEvent 状态

是否可以检查AutoResetEvent对象的实际处理方式?它是由超时触发还是通过从另一个方法调用 Set() 触发的?

这是我的代码。

0 投票
5 回答
4908 浏览

c# - AutoResetEvent 与布尔值来停止线程

我在工作线程中有一个对象,我可以指示它停止运行。我可以使用 bool 或 AutoResetEvent 来实现它:

布尔值:

自动复位事件:

然后该Stop()方法将设置_isRunning为 false,或调用_stop.Set().

除此之外,使用 AutoResetEvent 的解决方案可能会停止得更快一些,这些方法之间有什么区别吗?这个比那个好吗?

0 投票
1 回答
76 浏览

c# - 多个客户端等待相同的事件

我正在开发一个通信 API,供许多通用客户端与专有系统通信。

这个专有系统公开了一个 API,我使用一个特定的类来发送和等待来自这个系统的消息:显然系统会使用事件提醒我消息已准备好。该事件被命名为 OnMessageArrived。

我的想法是公开一个简单的 SendSyncMessage(message) 方法,帮助用户/客户端简单地发送消息,该方法返回响应。

客户端:

通信器类是这样完成的:

我真的不喜欢使用waithandle,但我的想法是创建一个发送消息并等待事件的实例。一旦事件到达,检查消息是否是我期望的(检查唯一的 guid),否则继续等待下一个事件。这是因为可能(并且通常以这种方式)许多客户端同时工作,我希望它们并行工作。当我实现我的东西时,目前如果我运行客户端 1、客户端 2 和客户端 3,客户端 2 在客户端 1 完成后立即开始发送消息,客户端 3 作为客户端 2 完成:不是我想要的做。

你能帮我修复我的代码并获得我的目标吗?

谢谢!

0 投票
2 回答
5910 浏览

c# - 线程等待 WaitOne() 时停止应用程序的正确方法

我正在玩AutoResetEvent,我的应用程序没有结束,我想我知道为什么:线程仍在运行,因此应用程序不会终止。通常,在 中Main(),我按下一个键后,应用程序就会终止。但是控制台窗口不再关闭。我有一个简单的控制台应用程序:

终止此应用程序的正确方法是什么?我是否需要保留对每个线程的引用并调用每个线程Abort()?有没有办法发出信号waitHandle让等待它的线程终止?(我不这么认为,但我认为值得一问。)

0 投票
1 回答
389 浏览

c# - AutoResetEvent 由于某种原因不起作用

upd我发现 AutoResetEvent 按预期工作。看来我在里面的某个地方有异常CalculateAndNotify。所以这个问题不再是关于 AutoResetEvent 了。但是,如果您可以建议如何更好地计算 HFT 软件中的索引 - 欢迎发表评论。

==================================================== ============================= 我在我的班级的完整列表下面添加。有两种重要的方法。Calculate每次InstrumentUpdated调用都会重新计算索引值。

我添加了一些跟踪并注意到:一个线程挂在are.WaitOne(). 尽管另一个线程are.Set()多次调用第一个线程并没有被释放。为什么?我的代码有什么问题?

0 投票
1 回答
177 浏览

javascript - 重置节点顺序和隐藏 event.srcElement

我正在建立一个自定义公司层次结构,需要能够“提升”一个 Div 在公司图表中的排名。我将触发器作为跨度放置在每个 div 内。点击事件设置为找到父div并与前一个div交换。我的工作正常,问题是:

  1. 在此之后,我需要“重置”文档中节点的顺序,以便后续交换脱离新顺序,而不是加载时存在的顺序。

  2. 我需要查找交换的 div 在组内的位置,如果它是隐藏包含向上按钮的跨度的系列中的第一个。我会用这个逻辑想象一些东西:

我知道语法是错误的,但我是 js 新手,所以请指出我正确的方向。

这是我现在正在使用的代码。就目前而言,如果我将 3 个元素的顺序从 1、2、3 交换到 2、1、3,您会认为单击 3 上的交换会将其切换为现在之前的 1,但它会将其与 2 交换,页面加载时它之前的元素。