问题标签 [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 投票
2 回答
1698 浏览

c# - 在 C# 中使用异步方法进行消息循环

我正在制作一个在线通信应用程序,我想异步处理消息。我发现异步等待模式在实现消息循环时很有用。

以下是我到目前为止所得到的:

然后我收到一些警告,说在 NewMemberCallback 中,不等待对 MessageLoop 的调用。我实际上不需要等待 MessageLoop 方法,因为该方法在连接断开之前不会返回。像这样使用异步是否被认为是一种好习惯?我听说不等待异步方法不好,但我也听说我应该消除不必要的等待。或者将异步模式用于消息循环甚至被认为是不好的?

0 投票
0 回答
942 浏览

vba - 为什么(或如何检测)我的 DDE 对话从 Excel 中随机挂起?

问题性质

我有一个启用宏的 Excel 表,它成功地建立了 DDE 连接并与 ManMan 数据库系统 Minisoft 的终端应用程序进行对话。大约 95% 的时间 DDE 可以正常工作,但有时 (~5%) Excel 和 Minisoft 之间似乎没有任何数据交换。当发生这种情况时,Minisoft shell 会挂起等待数据,基本上锁定了我的工作表,直到它崩溃或用户沮丧地终止 Excel 进程。这种挂起的对话只会在打开外壳后对话开始时发生,而且它似乎是随机发生的(我可以执行工作表的 VBA 3 次,然后它挂起,或者我可以执行 50 次,它永远不会挂起)。一旦发生 DDE 挂起,它会在随后的每次执行尝试中挂起(即使我关闭 Excel/Minisoft 并重新打开),直到我重新启动机器或注销并重新登录 Windows,似乎没有其他方法可以解决这个问题。如果有人对可能导致此问题的原因有任何见解,请告诉我。我需要能够防止它或检测何时发生这种挂起。

代码和附加信息:

DDE 传递给 Minisoft 终端的字符串是触发所需输出的关键字。问题不在于沟通的内容,而在于沟通的能力。当问题发生时,我相信它发生在 StartManMan Sub 中。终端已启动,但似乎没有任何字符串被传递到终端,因为它只是无限期地处于静止状态(等待击键 - 用户可以直接与终端交互,终端本身是响应式的)并且 Excel 仍然无法使用忙着执行代码。只有当我没有从“KBSTRING HELLO”中看到“HELLO”的输出时,才会出现此问题。如果我确实看到“HELLO”,那么它总是在 100% 的时间里完美运行。

我已经阅读了以下关于挂起的内容: http ://www.angelfire.com/biz/rhaminisys/ddeinfo.html#DDEslow 并意识到它可能与线程相关,但如果是这样的话,那只会改变我的问题的重点(如何我要防止/检测到这一点吗?)。此外,引用的错误文章 Q136218 也不再可用。

0 投票
3 回答
2951 浏览

mfc - MFC 中的消息循环

我对Win32 API有所了解,但现在我想学习MFC。在我的电子书中,他们说这个CWinApp类管理应用程序的主线程,但我在这个类中找不到类似GetMessageDispatchMessage函数。那么它如何开始消息循环呢?

请有人为我解释一下。抱歉,我是 MFC 的新手,我的英语很差。在哪里可以找到一些关于 Visual Studio 中 MFC 的电子书/教程?

0 投票
1 回答
1553 浏览

c++ - 为什么我不能在窗口过程之外得到 WM_DESTROY 或 WM_CLOSE 消息?

我想在将消息发送到窗口过程之前读出消息循环中的消息。我尝试像这样阅读的大多数消息都被正确读取,但是当我关闭窗口时,无法读取WM_CLOSEWM_DESTROY消息,好像它们从未收到过一样。这就是我所做的:

我在第一种情况下设置了一个断点,但即使我关闭窗口(通过单击“X”),断点也不会被命中。但是,当我WM_DESTROY在窗口过程中检查时,它会被读取并且一切正常。为什么不在外面呢?

此类消息是否直接发送到窗口 proc?如何?

0 投票
1 回答
520 浏览

java - 监听来自 TCP 服务器的传入消息会导致 StackOverflow

我需要不断地监听来自我的 C# TCP 服务器的消息,所以我在单独的线程中进行:

我的方法有什么问题?为什么我会收到 StackOverflowError?我猜它run()的调用速度非常快,因为BufferedReader.readLine()它是非阻塞的,但我能做些什么呢?

0 投票
1 回答
202 浏览

c++ - 使用 Windows 消息循环接收我正在编写的库中的事件

我正在编写一个包含一些媒体基础功能的库。我希望能够通过回调通知图书馆用户何时将网络摄像头连接到系统/从系统断开连接。MSDN 描述了如何知道相机何时断开连接,但它使用消息循环让您知道这一点。我不太了解 Windows 消息循环,但是我在这篇 MSDN 文章中读到的内容告诉我,我必须有一个窗口才能有一个消息循环,这对于库来说是不可接受的。

所以,我有几个问题:

  1. 我可以在新线程中创建消息循环并接收第一个链接描述的那些通知消息吗?(我希望它在一个新线程中,这样它就不会阻塞库用户的线程,然后库用户调用setCameraChangeCallback(...),这会在其中启动消息循环。)如果是这样,我应该使用哪些函数来创建消息循环?

  2. 我可以在不创建任何窗口的情况下做到这一点吗?setCameraChangeCallback(...)这是一个图书馆,所以如果图书馆用户打电话突然出现一个窗口,那就很奇怪了。同样,非常欢迎解释如何做到这一点(函数名称、要使用的特定参数等)。

  3. 我的库可以在 Windows 应用程序中正常使用吗?这意味着将使用我的库的 Windows 应用程序可能已经创建了一个窗口并且它自己的消息循环正在运行。我在单独线程中运行的消息循环会干扰库用户的消息循环吗?如果是这样,如何避免这种情况?

  4. 有什么能阻止我创建两个或多个带有消息循环的线程,每个线程都注册以获得相机更改事件的通知?

0 投票
1 回答
122 浏览

.net - 未知的 Windows 消息 0xC052

我正在解决一个问题(如何检测在应用程序中打开的表单)并偶然发现了一条我无法理解的 Windows 消息:0xC052。

这是表单打开时我在 MessageFilter 中收到的第一条消息。但由于我没有找到任何参考资料,我不想依赖这样的假设,即消息告诉我打开了一个表单是可靠的。

编辑:添加代码

0 投票
1 回答
281 浏览

c# - .NET 的事件机制

在我迄今为止看到的所有关于 C#/.NET 的书籍中,当他们谈论事件时,
他们谈论的是创建使用事件。

我很想了解它在我们的代码背后是如何工作的——运行它的机制是什么。

我从 Windows 消息循环的作用类似于引发事件的队列这一事实中知道一点。
例如, WM_KEYDOWN, 或WM_LBUTTONDOWN, 等等。

但是,例如,如果我创建了一个不继承的类class Control,而这个类引发了一个事件,会发生什么?
(另一个也没有继承class Control的类接收它)

引发的事件会通过消息循环吗?
听起来不太合乎逻辑..
(但假设该项目是一个 Windows 窗体项目,只有 2 个类 - 发送方和接收方根本不是 GUI 类,而是您编写的简单类)

任何关于我们代码背后机制的文章的解释或链接都将受到高度赞赏。

0 投票
1 回答
64 浏览

c# - 为什么另存为对话框会阻止发件人?

我的程序的目的是通过记事本菜单中的另存为项目触发记事本的另存为对话框。

运行上面的代码时,记事本的另存为对话框出现,控制台将记录“完成!” 直到用户单击保存按钮。为什么我的程序必须等待?如何避免?

0 投票
2 回答
194 浏览

winforms - 如何在 WinForms 中推送消息循环?

在 WPF 中,我可以使用Dispatcher.PushFrame.

WinForms 中的等价物是什么?我很熟悉,DoEvents但必须在一个循环中调用它,它可以旋转 CPU,而不是等待消息或事件发出信号退出的非常有效的方法(就像Dispatcher.PushFrame有)。