从前,我曾经牢记这些内容。随着时间的推移,我的理解逐渐淡化,现在我想更新一下。
据我回忆,任何所谓的单线程应用程序都有两个线程:
a) 主线程,它指向主要或DllMain入口点的指针;和
b) 对于具有某些UI的应用程序,有一个UI线程,也称为次要线程,在该线程上运行WndProc,即执行接收Windows发布的消息的WndProc的线程。简而言之,执行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在他的经典作品中对此话题的讨论很少。
尽管我认为我有一定的正确性,但确认一下会让人感到宽慰。