【发布时间】:2013-01-07 17:22:25
【问题描述】:
我有点困惑,想知道我是否被误导了,在另一篇文章中我被告知“只有当你明确地创建新线程时才会创建新线程。C++ 程序默认情况下是单线程的。”当我打开没有在 ollydbg 中显式创建新线程的程序时,我多次注意到通常有 2 个线程在运行。我想在不停止执行的情况下了解消息循环是如何工作的,我得到的解释不足以解释它是如何工作的。
消息循环是创建一个新线程还是占用主线程?如果它需要主线程,它是否会在其他所有内容都执行后才这样做,而不管代码顺序如何?如果它不这样做但仍然占用主线程,它是否会产生一个新线程以便程序可以执行而不是卡在消息循环中?
编辑:通过实验解决了我的大部分问题。消息循环占用主线程和代码后面的任何代码:
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
不会执行,除非执行一些特殊的操作以使其执行,因为程序卡在消息循环中。在执行的窗口过程中放置无限循环会导致程序崩溃。我仍然不明白多线程的奥秘,但在 olly 到我更喜欢的程度。
【问题讨论】:
-
你在问我们你的程序是做什么的。我们怎么知道?
-
是的,线程确实需要显式创建,但其他库/函数可以根据需要创建它们。如果您附加并中断调试器,您还将看到至少一个其他线程。你不需要担心它们,但你应该能够从起始地址/调用堆栈中找出它们是什么。
标签: c++ multithreading winapi messages