问题标签 [manualresetevent]

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 投票
1 回答
37 浏览

c# - MaualResetEventSlim 没有停止线程

我的示例应用程序中有以下代码:

在类的构造函数中,我初始化了两个线程:

这些线程执行的方法是:

我面临的问题是,即使在调用 _screenSaverOff.Wait() 方法之后,“thread2”也没有被阻塞。下面给出的日志条目:

谢谢帕万米什拉

0 投票
0 回答
1805 浏览

c# - ManualResetEvent.WaitOne 的功能与 0 超时参数

我正在处理对WaitOneManualResetEvent调用有一些调用的代码。

从 MSDN 文档中,

如果超时为零,则该方法不会阻塞。它测试等待句柄的状态并立即返回。

现在,这是我的一段代码:

在这里,根据文档,我希望它打印 abc,从 WaitOne 返回并打印 def。manualResetEventObject此时未发出信号,因此WaitOne的返回值应为假。

但是, def 永远不会打印,我看到一个ThreadInterruptedException被抛出(有一个try/catch块包围它)。

我不明白为什么这不打印 def 或为什么抛出异常。这里到底发生了什么?

0 投票
1 回答
2602 浏览

multithreading - NSOperationQueue 暂停和恢复?

我使用NSOperationQueue. 我在其中设置maxConcurrentOperationCount25. 即同时同时运行 25 个线程。

我正在使用 this 将块上传到服务器NSOperationQueue。因此,块被分配给前 25 个线程。满后NSOperationQueue,我想暂停分块读取部分,然后每当队列中的线程完成时,恢复分块部分以分配新线程NSOperationQueue以替换完成的线程。

我的代码:

那么如何使用暂停和恢复NSOperationQueue呢?如何ManualResetEvent在 Objective-C 中实现?

0 投票
4 回答
3342 浏览

c# - 如何在不冻结我的 UI 的情况下使用 ManualResetEvent

我想使用ManualResetEvent而不是Thread.Sleep防止我的 UI 被释放。

这是我尝试过的:

手术后我想等待 5 秒钟:

我的问题是我的用户界面仍然冻结...

0 投票
0 回答
653 浏览

c# - 如何检查 ManualResetEvent 的线程状态或在阻塞时调用?

我想在 ManualResetEvent 阻止线程后调用 _myThread.Abort()。所以要么我想检查线程是否已经被阻塞,要么我想调用一个只在线程暂停后调用 _myThread.Abort() 的委托。

到目前为止,我得到了:

像询问 _myManualResetEvent.WaitOne(0) 这样的事情不起作用,因为它只是返回 ManualResetEvent 的状态,这可能与实际线程状态不同,但我想知道线程是否已经被阻塞(这意味着它已经调用等待一个())。检查线程状态不起作用,因为 ManualResetEvent 使用 System.Threading.ThreadState.WaitSleepJoin,就像许多其他函数一样。

0 投票
2 回答
8100 浏览

c# - ManualResetEventSlim recommended wait time

The MSDN documentation for ManualResetEventSlim states

You can use this class for better performance than ManualResetEvent when wait times are expected to be very short.

How long is "very short"? At what point will the benefit of using a kernel object with a ManualResetEvent outweigh the overhead of instantiating it?

0 投票
0 回答
124 浏览

windows - manualresetevent.waitone 挂起

我有一个带有计时器的 Windows 服务。定时器每天大约 3 次将文件上传到不同的 ftp 服务器。我设置计时器,上传文件,然后设置下一次。这工作了一段时间,直到我添加了另一个用于上传文件的 ftpserver。上传到该 ftpserver 时,项目在 manualresetevent.waitone 挂起(即使文件夹已上传) 这里是部分代码,如果需要更多,请告诉我。

这个 ftpserver 的工作方式与我正在使用的其他服务器略有不同,我不确定这是否是问题的原因。

不同之处在于:我上传了一个可能非常大的 zip 文件夹(不仅仅是文件),并且在上传后不久,它就会从该 ftpserver 中移出。

(而其他 ftpserver 将文件留在 ftpserver 上)

我认为这个问题只有在 zipfolder 变大后才开始。

我知道它已上传,然后从那里删除。

那么如果上传完成了,为什么会卡在waitone呢?

这是我的 endstreamcallback 函数

' EndGetResponseCallback 方法
' 完成对 BeginGetResponse 的调用。

0 投票
1 回答
1319 浏览

c# - ManualResetEvent.WaitOne 卡住了 GUI

我有一个Timer可以做几件事的

我有一个停止计时器的功能:

发生了一件非常奇怪的事情!

有时所有的 GUI 都会挂起timerDisposeHandler.WaitOne();(但只是有时,我看不到在它发生的地方重复出现的模式,它只是动态地)

有没有人遇到过类似的问题并解决了?

0 投票
2 回答
213 浏览

c# - 为什么在这里使用两个 ManualResetEvents 会导致死锁?

我正在使用Starksoft.Net.Ftp为上传执行异步操作。

看起来像这样:

如您所见,其中有一个ManualResetEvent,它被声明为类顶部的私有变量:

嗯,感觉只是它应该等待上传完成,但它必须是异步的才能报告进度,仅此而已。

现在,这很好用。如果愿意,我还有第二种方法可以取消上传。

当上传被取消时,服务器上的一个目录也必须被删除。我也有一个方法:

由于取消时没有调用上传的完成事件,我需要在DeleteDirectory方法中手动设置ResetEvent。

现在,我在这里做什么:我首先列出目录中的所有文件以便删除它们,因为无法删除已填充的文件夹。

此方法GetDirListAsync也是异步的,这意味着我需要另一个ManualResetEvent,因为我不希望表单冻结。

此 ResetEvent 是_directoryFilesListingResetEvent。它像上面的_uploadResetEvent一样声明。

现在,问题是,它转到_directoryFilesListingResetEvent的 WaitOne 调用,然后卡住了。一个死锁并且表单冻结。(我也在代码中标记了它)

这是为什么?我试图移动_uploadResetEvent.Set()的调用的调用,但它没有改变。有没有人看到问题?

当我尝试调用DeleteDirectory -方法而不进行任何上传时,它也可以正常工作。我认为问题在于两个 ResetEvents 都使用相同的资源或其他东西并且自己重叠,我不知道。

谢谢你的帮助。

0 投票
1 回答
993 浏览

c# - Dispose WaitOne 函数卡住定时器回调

我有一个计时器,它的回调做一些事情:

计时器:

回调:

当我想停止计时器时,我调用了停止函数:

在 stop 函数后面的timerDisposeHandler.WaitOne();代码之前使用确保 dispose 完成。

但有时当在回调的中间调用停止函数时,waitone 卡住了。

似乎 WaitOne 卡住了回调,但我不明白为什么会这样,是不是在它自己的线程中找不到计时器回调?为什么stop函数的线程要卡住呢?

如果有人可以向我解释情况并给我解决方案,我会很高兴。