曾几何时,我牢牢记住了这件事。随着时间的流逝,我的理解已经淡化,我打算刷新它。
我记得,任何所谓的单线程应用程序都有两个线程:
a) 具有指向 main 或 DllMain 入口点的指针的主线程;和
b) 对于具有一些 UI 的应用程序,一个 UI 线程,也就是第二个线程,WndProc 在其上运行,即执行 WndProc 的线程接收 Windows 发布给它的消息。简而言之,就是执行 Windows 消息循环的线程。
对于 UI 应用程序,主线程处于阻塞状态,等待来自 Windows 的消息。当它接收到它们时,它将它们排队并将它们分派到消息循环 (WndProc) 并且 UI 线程开始启动。
据我了解,处于阻塞状态的主线程是这样的:
C++
while(getmessage(/* args &msg, etc. */))
{
translatemessage(&msg, 0, 0);
dispatchmessage(&msg, 0, 0);
}
C# 或 VB.NET WinForms 应用程序:
Application.Run( new System.Windows.Forms() );
这就是他们所说的调度员吗?
我的问题是:
a) 我的上述理解正确吗?
b) 调度员到底是什么鬼?
c) 指向我可以从 Windows/Win32 角度更好地理解线程的资源,然后将其与 C# 等高级语言联系起来。Petzold 在他史诗般的作品中对这个主题的讨论很谨慎。
虽然我相信我的说法有些正确,但确认会缓解。