问题标签 [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.

0 投票
4 回答
6800 浏览

c# - 在等待 WaitHandle 时运行消息循环

当 UI 线程等待 WaitHandle 或其他线程原语时,有什么方法可以处理所有 Windows 消息?

我意识到它可能会产生非常混乱的重入问题;无论如何我都想做。

编辑:等待发生在必须在 UI 线程上运行的复杂函数的中间。因此,将等待移至后台线程不是一种选择。(将功能一分为二会造成复杂且无法维护的混乱)

0 投票
1 回答
806 浏览

module - WTL 8.0 _模块和消息循环

我正在开发一个 WTL 项目,实际上是带有 VS2008 的 WTL 8.1。在许多教程中,我看到了_Module 全局变量的用法,例如:_Module.AddMessageLoop。我当前的应用程序在 WinMain 的堆栈中创建一个 CMessageLoop,然后调用 CMessageLoop::Run () 方法。到目前为止,它运行良好。在最新的 WTL 版本中,任何人有理由(如果有必要)调用 _Module.Init、_Module.Term 和 AddMessageLoop 吗?

谢谢。

0 投票
3 回答
594 浏览

c# - AutoResetEvent 和 COM 对象

我注意到 AutoResetEvent 在 WaitOne() 调用中间时(有时)完全冻结了消息循环,甚至有效地阻止了信号消息。

IE:

  1. (UI) 新线程产生
  2. (UI) 代码调用 WaitOne(); 超时:10s
  3. (T2) 线程打开设备,调用 Set()
  4. (UI) WaitOne 阻塞消息循环
  5. (UI) WaitOne 超时,代码继续执行
  6. (UI) 主窗口接收信号并继续(但 WaitOne 失败)

有任何想法吗?

编辑:添加 UI/T2 来指定线程。另外,我正在尝试将第 3 方库变为同步。打开设备涉及一个 Open() 调用,该调用反过来会产生一个 OpenOK 或 OpenFailed 事件,我正在尝试进行一个 bool Open() 调用,该调用根据产生的事件返回真/假。

0 投票
2 回答
281 浏览

winapi - 窗口移动和调整大小会干扰 MsgWaitForMultipleObjects

我有一个应用程序,它使用 MsgWaitForMultipleObjects 进行消息循环,以在发送 ui 消息时捕获其他事件。似乎只要窗口被移动或调整大小,DefWindowProc 就会开始它自己的消息循环,直到释放鼠标。这种情况会阻止外部循环同时捕获其他消息。

我不想仅仅因为这个而对应用程序进行多线程处理。有没有其他方法可以解决它?

0 投票
1 回答
718 浏览

android - 在没有消息循环的情况下从另一个线程触发 Android 对话框

在 SurfaceView 中,我正在调度在标准“LockCanvas-Draw-unlockCanvasAndPost”循环内绘制画布的新线程。(请注意,线程不包含消息循环)。

如何从该线程显示 Android 标准对话框?

由于线程没有 msg 循环,因此以下代码不起作用:

0 投票
1 回答
2385 浏览

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 在他史诗般的作品中对这个主题的讨论很谨慎。

虽然我相信我的说法有些正确,但确认会缓解。

0 投票
2 回答
575 浏览

erlang - Erlang 消息循环

erlang 中的消息循环如何工作,它们在处理消息时是否同步?

据我了解,循环将从“接收”消息开始,然后执行某些操作并命中循环的另一个迭代。

所以一定要同步?对?

如果多个客户端将消息发送到同一个消息循环,那么所有这些消息都会排队并一个接一个地执行,或者?

要并行处理多条消息,您必须在不同的进程中产生多个消息循环,对吗?

还是我误解了这一切?

0 投票
1 回答
6956 浏览

erlang - Erlang 中的代码热交换

我最近在 InfoQ 上看到了一个关于 Erlang 的视频,在该视频中,一位创建者展示了如何替换消息循环的行为。

他只是发送一条包含新版本消息循环代码的 lambda 的消息,然后调用它而不是再次调用旧循环。

Erlang 中的代码热交换指的是什么?还是其他一些更原生的功能?

0 投票
4 回答
29862 浏览

c# - 如何在 C# 中的不同线程上运行新表单?

我只是在每次单击按钮时都尝试运行一个新线程,这应该创建一个新表单。我在 MainForm 中的按钮单击事件中尝试了这个:

子窗体按钮单击事件中的代码如下所示:

这是正确的方法吗?因为我试图打开两个独立的表单,一个线程中的操作不应该影响另一个线程。

或者 BackGroundworker 是实现这一点的解决方案吗?如果是的话,有人可以帮我吗?

0 投票
5 回答
10838 浏览

c++ - 更改 Window 的消息循环线程

最近我尝试将一个窗口的消息循环放在它自己的线程中,我想知道为什么它从来没有收到任何消息,但我了解到 Windows 将消息发布到创建窗口的线程。如何在一个线程中创建一个窗口并让另一个线程接收该窗口的消息?我见过 PostThreadMessage 函数,但我相信它还需要创建窗口的线程来监听消息,这正是我试图避免的事情,所以这个函数不是我需要的。

这似乎是一个常见问题,我花了很多时间在谷歌上搜索答案,但我找不到答案。