问题标签 [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.
c# - 无法在 STAThread 中使用 AutoResetEvent.WaitOne() 和 Thread.Sleep
在我的程序中,主函数启动一个后台线程,该线程在 UI 线程中创建我需要的对象(使用 Windows 窗体,因此标记为 [STAThread])。
简化代码:
但是,即使我在 lock 语句处设置了断点,它也会res
变为 false 并且该字段在主线程中保持为空。kernel
此外,Thread.Sleep
在Main
函数中使用将立即返回,而无需休眠。
所以在我看来,这可能[STAThread]
会对这些方法施加限制?!这是真的吗,有什么好的方法可以规避这个问题?就我而言,我可能会将主线程标记为非 STA,然后稍后运行 STA 线程(还没有尝试过),但是有没有通用的解决方案?
c# - waitany(Array) 是否真的“设置”了一个事件,或者它只是返回一个信号事件的索引
http://msdn.microsoft.com/en-us/library/tdykks7z.aspx
根据文档,返回值为:
“满足等待的对象的数组索引。”
所以这意味着索引表示已设置的事件,并且此代码将导致死锁,因为它会等待自己:
这段代码是正确的:
我只是想确保(以我的拙见)文档不是 100% 清楚的
编辑:
我的设计有缺陷,正如@Hans Passant 指出的那样,我应该使用信号量。因为我想确保 N 个 yahooRequests 可以访问一个函数。但@arno 从技术上回答了最初的问题。真希望我能设置两个接受的答案
编辑:
同样正如@Sriram Sakthivel 在评论中指出的那样,第一个示例将永远等待自己。但实际上并不是死锁。
c# - 多线程中的信号问题
我正在从Albahari 的线程文章链接中实现“生产者/消费者队列” -->
在下面这篇文章的工作方法中,如果我在_wh.WaitOne() 之前添加一个控制台写入,如 Console.WriteLine("In waiting state .... 1"),那么信号不起作用并且消费者线程似乎无限期地等待.
有人可以解释这种行为吗?
c# - 使用等待句柄
我正在尝试做这样的事情:
在代码的其他地方,会有调用的方法:
所以 LongRunningOperation() 被执行..
问题是,handler.Set()
可以在AsyncWait()
线程运行时再次调用LongRunningOperation()
这使得当仍在执行LongRunningOperation()
时被调用时将永远不会被调用handler.Set()
AsyncWait()
LongRunningOperation()
如何做到这一点?:(
c# - AutoResetEvent 自行触发
我有一个奇怪的 AutoResetEvent 行为
Utils 类中有代码:
并且在收听时有代码:
它是这样调用的:
在这种情况下,第一次调用 WaitOne 时,它会立即返回 false(就像超时一样)。第二次没问题,调试输出中甚至没有“DownloadStringAsinc 完成”。当我从主线程调用 Utils.FileDownloaded.WaitOne(2222) 时(我知道这是不对的,只是在测试)它按预期工作。但是当我将块移动到线程时,出现了这种行为。另外,如果我在稍后块中的“if”语句之前创建 Thread.Sleep(200),一切正常
必须添加:来自 Utils 类的代码不会从不同的地方同时调用。
我可能会考虑:“好的,此应用程序的问题已解决”。但这并没有解决我的问题。我必须明白。
windows - setEvent 在没有 ResetEvent 的情况下被调用
如果使用 setEvent 设置了手动重置事件但未使用 ResetEvent 重置,会发生什么情况;并且该事件被多次触发。即在处理事件时,再次设置事件。
以下是示例任务:
现在,假设当 hEvent1 的情况正在执行时(即它仍然设置),不知何故再次触发了 hEvent1。我故意不放 ResetEvent(hEvent1) 即使它是手动复位事件。那么,我们有竞争条件吗?
c# - 两线程一核
我正在玩一个简单的控制台应用程序,它创建一个线程,并在主线程和工作线程之间进行一些线程间通信。
我正在将对象从主线程发布到并发队列,并且工作线程正在将其出列并进行一些处理。
让我感到奇怪的是,当我分析这个应用程序时,即使我有两个内核。一个核心是 100% 空闲的,而另一个核心已经完成了所有工作,我看到两个线程都在该核心中运行。
为什么是这样?
是因为我使用了一个等待句柄,它在我发布消息时设置并在处理完成时释放?
这是我的示例代码,现在使用 2 个工作线程。它的行为仍然相同,main、worker1 和 worker2 在同一个内核中运行。想法?
[编辑] 它现在有点用,至少,与昨天相比,我的性能提高了两倍。诀窍是减慢消费者的速度,以避免使用 AutoResetEvent 发出信号。
.net - 从 AutoResetEvent.WaitOne(timeout) 调用唤醒的线程延迟
我需要调用 3rd 方库,但我不能总是等待结果。我决定在后台线程上进行调用,然后在有限的时间内等待调用完成(最好等待,但我不能永远等待)。我的方法如下。我传入一个调用 3rd 方方法的委托
问题是调用线程似乎并没有很快从 WaitOne() 调用中唤醒。如果我传入 3000 的超时值,我希望 Waitone() 调用阻塞不超过 3 秒。但是,在调用 .Set() 和 WaitOne() 方法返回之间似乎有很长的延迟。
我检查 WaitOne() 的返回状态,它返回 true 表示已收到信号(未超时)
我意识到您无法控制线程计划运行的时间,但这发生在应用程序关闭并且没有其他任何事情发生时。此外,等待 23 秒以安排线程运行似乎过分了。
在 i5 四核 3GHz 64 位、.Net 4.0、Windows 7 Ultimate 上运行
我错过了什么?
windows-phone-8 - 分配在另一个线程上运行的事件处理程序
我正在尝试将 windows phone 8 图像捕获代码放入我基本上拥有的旧模型中
...
...
有没有办法让事件处理程序在另一个线程上运行完成的事件,以便 AutoResetEvent 在调用时不会阻止它运行?
c# - c#中信号线程的性能
我一直试图了解“唤醒”一个正在等待阻塞构造的线程需要多长时间AutoResetEvent
- 从我阅读多次讨论后的理解来看,Windows 有某种内部时钟,每 15.6 毫秒“滴答”一次(或左右),然后决定接下来安排哪些线程运行,所以我希望发出一个线程直到该线程唤醒之间的时间差将花费 0-15.6ms 之间的随机时间。所以我写了这个小程序来测试我的理论:
令我惊讶的是,平均唤醒时间约为 0.05 毫秒 - 所以显然我错过了一些东西,但我不知道是什么......