Давным-давно я вспомнил этот материал наизусть. Со временем мое понимание ослабло, и я собираюсь обновить его.
Насколько я помню, любое так называемое однопоточное приложение имеет два потока:
a) основной поток, который имеет указатель на основную точку входа или точки входа DllMain; и
b) Для приложений, имеющих некоторый пользовательский интерфейс, поток пользовательского интерфейса, a.k.a вторичный поток, в котором работает WndProc, т. Е. Поток, который выполняет WndProc, который получает сообщения, которые Windows отправляет ему. Короче говоря, поток, который выполняет цикл сообщений Windows.
Для приложений пользовательского интерфейса основной поток находится в состоянии блокировки, ожидая сообщений из Windows. Когда он получает их, он ставит их в очередь и отправляет их в цикл обработки сообщений (WndProc), и поток пользовательского интерфейса запускается.
Насколько я понимаю, основной поток, который находится в состоянии блокировки, это:
C ++
while(getmessage(/* args &msg, etc. */))
{
translatemessage(&msg, 0, 0);
dispatchmessage(&msg, 0, 0);
}
Приложения C # или VB.NET WinForms:
Application.Run( new System.Windows.Forms() );
Это то, что они называют Диспетчером?
Мои вопросы:
а) Правильно ли мое понимание выше?
б) Что, во имя ада, является Диспетчером?
в) Укажите мне ресурс, где я могу лучше понять потоки с точки зрения Windows / Win32, а затем связать его с языками высокого уровня, такими как C #. Петцольд щедро обсуждает эту тему в своей эпической работе.
Хотя я полагаю, что я в некоторой степени прав, подтверждение будет облегчением.