【发布时间】:2021-09-09 12:43:24
【问题描述】:
我想对消息泵在 Windows 系统中的工作原理有一个实际的了解。我创建了一个控制台应用程序。我在这个应用程序中创建了新线程:
var thread = new Thread(MessagePump) {IsBackground = true};
_thread.Start();
消息泵送如下所示:
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
我使用另一个程序向该线程发送消息。我看到线程正在接收我的消息。我想了解这是如何发生的。我还没有为这个线程创建一个窗口。根据instructions,需要一个窗口来接收消息。
【问题讨论】:
-
你如何“向这个线程发送消息”?
-
var Thread = new Thread建议使用 C#。您引用的消息泵循环是 C++。我想你很困惑,因为你混合了不同的语言,它们以不同的方式工作。 -
如果您没有窗口,那么您必须使用 PostThreadMessage()。专为此用途而设计。如果线程拥有任何可见窗口,则绝对不能使用,当线程进入模式消息循环(例如调整窗口大小)时,消息会丢失。
标签: windows multithreading message-pump