问题标签 [waitone]

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 投票
0 回答
384 浏览

c# - 具有 C# 播放口吃的低级音频播放器 - 修复?

我正在做一个小项目(只是为了好玩),它允许我显示在我当前的音频缓冲区中播放的频率。

计划是:

执行该WaveOutPlayer.ThreadProc()方法的线程不断播放和重新填充两个音频缓冲区。当第一个缓冲区正在播放时,第二个缓冲区被重新填充,反之亦然。为了确保一个缓冲区在另一个缓冲区停止播放之前不会开始播放,我使用了该WaitOne()方法。设备播放完缓冲区的音频数据后,调用WaveOut缓冲区的OnCompleted()方法。此方法取消等待。

播放本身开始,但非常不稳定。

谁能告诉我为什么会这样?

Visual Studio项目位于http://www.pour-toujours.net/lowlevelaudio.zip

(目前,仅支持 16 位、立体声、44.1kHz 未压缩 wav。)

这是我的一些似乎相关的代码:

0 投票
1 回答
393 浏览

multithreading - 由于放弃互斥锁,等待已完成

在运行以下应用程序的第一个实例时,它会打印“Acquired”。但是,如果我开始第二个,它会等待 1 分钟。在该时间间隔内,如果按下回车键并离开“第一个实例”,它会在第二个实例中引发“由于放弃互斥锁而导致等待完成”异常。不是假设要获取线程吗?(因为第一个实例已经发布了它?!)

0 投票
0 回答
136 浏览

c# - 如何暂停 AsyncWaitHandle.WaitOne(time) 倒计时

简而言之,RunWithTimer 运行一个方法,计数到 10,如果该方法完成的时间超过 10 秒,则将其中止:

我在一个名为 MainThread 的线程中调用 RunWithTimer,问题是当我挂起 MainThread 时,一切似乎都暂停了,但是当我恢复它时,10 秒计数器已经过去,并且 RunWithTimer 在它运行 10 秒之前停止该方法。实际上看起来暂停并没有暂停 AsyncWaitHandle.WaitOne(time),可能是因为 WaitOne 使用系统时间,而 MainThread 肯定不会暂停系统时间!

那么我应该怎么做,也暂停 WaitOne..?

0 投票
2 回答
1004 浏览

c# - 如何等待 BackgroundWorker 完成运行另一个 BackgroundWorker (C#)?

首先,我还是一个初学者,所以如果你能有一些耐心,我将不胜感激:)

今天我一直在为此苦苦思索。

问题是,我想运行三个不同的后台工作人员。但我想等到一个完成运行下一个,依此类推。

每个后台工作人员都需要时间来完成。长话短说,问题是,我正在使用 WaitOne() ,所以只要前一个后台工作人员告诉我它已经完成,我就可以开始运行新的,但是 UI 线程一直冻结,直到三个后台工作人员完成。

我正在设置一个不同的 AutoResetEvent,它负责处理整个等待和运行的事情。

这是代码:

另外,是否允许这样做?

0 投票
1 回答
203 浏览

c# - 如果其中一个是 Set(),则使用两个 WaitOne() 并继续

  • 我有一个负责计划传输文件的线程。
  • 文件传输计划在 XML 文件中提及,用户可以随时更改。
  • 我创建了一个FileSystemWatcher,它负责持续监视 XML 文件并通知 XML 文件是否有任何更改(以便我们可以获得新的计划值)。这通过设置一个被调用FileSystemWatcher来通知。AutoResetEvent_waitTillXmlChanges

问题:一旦计划的文件传输完成,我想将该线程置于等待状态,直到满足以下两个条件之一:

(一个)。到达下一个文件传输计划日期

(b)。或FileSystemWatcher已通知 .XML 文件的更改

如何让我的文件传输线程等待以上两个条件(两个AutoResetEvent等待)并在其中任何一个条件下继续Set()

0 投票
1 回答
449 浏览

c# - C# 中 WaitOne() 的虚假唤醒

我的程序中有两个 CRITERIA 决定线程应该等待还是继续。

第一个标准: XML 文件中的更改。我有一个文件观察器,如果 XML 文件发生更改,它会设置一个AutoResetEvent(_waitTillXmlChanges.Set()),因此线程应该继续。

第二个标准:到期日已到。如果今天是应该进行文件传输的日期,那么第二个标准已经满足,因此线程应该继续。

我当前的代码:

我知道,为了避免虚假的唤醒调用,将 awhile-loop放在 a 周围,WaitOne()以便线程在错误唤醒时再次进入等待模式。

问题:我不明白我应该如何实现故障安全while循环WaitOne()(这取决于两个条件)。

重要线索:因为每当 XML 文件发生更改时我都会在日志文件上打印,所以我可以说虚假的唤醒呼叫不是因为 FileWatcher。最有可能的是,问题出在 line 上_waitTillXmlChanges.WaitOne(waitTillNextWakeUpDay),它无法等待waitTillNextWakeUpDay(大约 1 天)的时间跨度,并且每 15-30 分钟就会醒来。

上面的代码在我的 PC 上可以正常工作,但在另一台 PC 上出现了虚假唤醒的问题。

0 投票
2 回答
116 浏览

c# - 一个事件等待另一事件发生

所以......用户必须点击按钮,在他点击它之后,程序应该等待再次点击面板并获取该点击的坐标。但只要我点击按钮,一切都变得毫无反应。难道我做错了什么?

0 投票
1 回答
554 浏览

c# - 使用信号量调用 WaitOne 是否会释放调用线程以执行其他工作?

我的应用程序需要每分钟为每个租户执行多项任务。这些是即发即弃的操作,所以我不想使用 Parallel.ForEach 来处理这个问题。

相反,我正在遍历租户列表,并触发 ThreadPool.QueueUserWorkItem 来处理每个租户任务。

这段代码在生产环境中运行良好,通常可以在 5 秒内处理超过 100 个租户。

但是,在应用程序启动时,这会导致 100% 的 CPU 使用率,而 EF 之类的东西会在启动过程中预热。为了限制这一点,我实现了一个信号量,如下所示:

这个想法是将这个任务处理限制为只能使用一半的机器逻辑处理器。在我调用的 ProcessTenant 方法中:

在测试中,这似乎完全按预期工作。启动时的 CPU 利用率保持在 50% 左右,并且似乎不会影响初始启动的速度。

所以问题主要是关于调用 WaitOne 时实际发生的情况。这是否会释放线程以处理其他任务 - 类似于异步调用?MSDN 文档指出 WaitOne:“阻塞当前线程,直到当前 WaitHandle 接收到信号。”

所以我只是担心这实际上不会让我的网络应用程序在等待时继续使用这个被阻塞的线程,这将使这个练习的全部意义变得毫无意义。

0 投票
1 回答
38 浏览

c# - 如何在 C# 中一次暂停线程?

我使用 ManualResetEnvent 来暂停/继续线程。代码示例如下。

问题是如果while循环很大怎么办,这意味着while语句中的每个循环都有很多操作要做。该线程将继续进行,直到遇到下一个_rstEvent.WaitOne();。除了不推荐使用的挂起之外,有没有办法立即暂停线程?