问题标签 [message-loop]
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# - 在等待 WaitHandle 时运行消息循环
当 UI 线程等待 WaitHandle 或其他线程原语时,有什么方法可以处理所有 Windows 消息?
我意识到它可能会产生非常混乱的重入问题;无论如何我都想做。
编辑:等待发生在必须在 UI 线程上运行的复杂函数的中间。因此,将等待移至后台线程不是一种选择。(将功能一分为二会造成复杂且无法维护的混乱)
module - WTL 8.0 _模块和消息循环
我正在开发一个 WTL 项目,实际上是带有 VS2008 的 WTL 8.1。在许多教程中,我看到了_Module 全局变量的用法,例如:_Module.AddMessageLoop。我当前的应用程序在 WinMain 的堆栈中创建一个 CMessageLoop,然后调用 CMessageLoop::Run () 方法。到目前为止,它运行良好。在最新的 WTL 版本中,任何人有理由(如果有必要)调用 _Module.Init、_Module.Term 和 AddMessageLoop 吗?
谢谢。
c# - AutoResetEvent 和 COM 对象
我注意到 AutoResetEvent 在 WaitOne() 调用中间时(有时)完全冻结了消息循环,甚至有效地阻止了信号消息。
IE:
- (UI) 新线程产生
- (UI) 代码调用 WaitOne(); 超时:10s
- (T2) 线程打开设备,调用 Set()
- (UI) WaitOne 阻塞消息循环
- (UI) WaitOne 超时,代码继续执行
- (UI) 主窗口接收信号并继续(但 WaitOne 失败)
有任何想法吗?
编辑:添加 UI/T2 来指定线程。另外,我正在尝试将第 3 方库变为同步。打开设备涉及一个 Open() 调用,该调用反过来会产生一个 OpenOK 或 OpenFailed 事件,我正在尝试进行一个 bool Open() 调用,该调用根据产生的事件返回真/假。
winapi - 窗口移动和调整大小会干扰 MsgWaitForMultipleObjects
我有一个应用程序,它使用 MsgWaitForMultipleObjects 进行消息循环,以在发送 ui 消息时捕获其他事件。似乎只要窗口被移动或调整大小,DefWindowProc 就会开始它自己的消息循环,直到释放鼠标。这种情况会阻止外部循环同时捕获其他消息。
我不想仅仅因为这个而对应用程序进行多线程处理。有没有其他方法可以解决它?
android - 在没有消息循环的情况下从另一个线程触发 Android 对话框
在 SurfaceView 中,我正在调度在标准“LockCanvas-Draw-unlockCanvasAndPost”循环内绘制画布的新线程。(请注意,线程不包含消息循环)。
如何从该线程显示 Android 标准对话框?
由于线程没有 msg 循环,因此以下代码不起作用:
multithreading - 线程 101:什么是调度程序?
曾几何时,我牢牢记住了这件事。随着时间的流逝,我的理解已经淡化,我打算刷新它。
我记得,任何所谓的单线程应用程序都有两个线程:
a) 具有指向 main 或 DllMain 入口点的指针的主线程;和
b) 对于具有一些 UI 的应用程序,一个 UI 线程,也就是第二个线程,WndProc 在其上运行,即执行 WndProc 的线程接收 Windows 发布给它的消息。简而言之,就是执行 Windows 消息循环的线程。
对于 UI 应用程序,主线程处于阻塞状态,等待来自 Windows 的消息。当它接收到它们时,它将它们排队并将它们分派到消息循环 (WndProc) 并且 UI 线程开始启动。
据我了解,处于阻塞状态的主线程是这样的:
C++
C# 或 VB.NET WinForms 应用程序:
这就是他们所说的调度员吗?
我的问题是:
a) 我的上述理解正确吗?
b) 调度员到底是什么鬼?
c) 指向我可以从 Windows/Win32 角度更好地理解线程的资源,然后将其与 C# 等高级语言联系起来。Petzold 在他史诗般的作品中对这个主题的讨论很谨慎。
虽然我相信我的说法有些正确,但确认会缓解。
erlang - Erlang 消息循环
erlang 中的消息循环如何工作,它们在处理消息时是否同步?
据我了解,循环将从“接收”消息开始,然后执行某些操作并命中循环的另一个迭代。
所以一定要同步?对?
如果多个客户端将消息发送到同一个消息循环,那么所有这些消息都会排队并一个接一个地执行,或者?
要并行处理多条消息,您必须在不同的进程中产生多个消息循环,对吗?
还是我误解了这一切?
erlang - Erlang 中的代码热交换
我最近在 InfoQ 上看到了一个关于 Erlang 的视频,在该视频中,一位创建者展示了如何替换消息循环的行为。
他只是发送一条包含新版本消息循环代码的 lambda 的消息,然后调用它而不是再次调用旧循环。
Erlang 中的代码热交换指的是什么?还是其他一些更原生的功能?
c# - 如何在 C# 中的不同线程上运行新表单?
我只是在每次单击按钮时都尝试运行一个新线程,这应该创建一个新表单。我在 MainForm 中的按钮单击事件中尝试了这个:
子窗体按钮单击事件中的代码如下所示:
这是正确的方法吗?因为我试图打开两个独立的表单,一个线程中的操作不应该影响另一个线程。
或者 BackGroundworker 是实现这一点的解决方案吗?如果是的话,有人可以帮我吗?
c++ - 更改 Window 的消息循环线程
最近我尝试将一个窗口的消息循环放在它自己的线程中,我想知道为什么它从来没有收到任何消息,但我了解到 Windows 将消息发布到创建窗口的线程。如何在一个线程中创建一个窗口并让另一个线程接收该窗口的消息?我见过 PostThreadMessage 函数,但我相信它还需要创建窗口的线程来监听消息,这正是我试图避免的事情,所以这个函数不是我需要的。
这似乎是一个常见问题,我花了很多时间在谷歌上搜索答案,但我找不到答案。