Как узнать, выполняется ли код в потоке пользовательского интерфейса или в рабочем потоке (MFC Visual C ++) - PullRequest
5 голосов
/ 27 мая 2009

У меня есть функция, которая вызывается из разных потоков в приложении. Мне нужно знать, является ли поток, который выполняет код, основным потоком (потоком пользовательского интерфейса) или рабочим потоком.

Есть предложения?

Спасибо.

Ответы [ 3 ]

13 голосов
/ 27 мая 2009

Используйте следующий код, если вы используете приложение MFC.

if(GetCurrentThreadId() == AfxGetApp()->m_nThreadID)
{
    //Main Thread
}
else
{
    //Not Main Thread
}
5 голосов
/ 27 мая 2009

Используйте GetCurrentThread () или GetCurrentTreadId () и сравните его с известным HANDLE или id основного потока.

Не может ли быть несколько потоков пользовательского интерфейса?

Конечно, можно, но только один основной пользовательский поток.

Ok. Но есть ли способ узнать РУЧКА или ID основного потока от этот код? Я имею в виду что-то вроде GetMainThread или GetMainThreadID. я хотел бы не изменять другие части приложения (если возможно). КСТАТИ, Спасибо за ваш ответ.

Извините, я был на обеде, и вы уже получили свой ответ. Но все равно может ответить. GetCurrentThreadId (), конечно, может использоваться во время выполнения основного потока пользовательского интерфейса и быть кэшированным для последующего сравнения. Где-то во время исполнения вашего приложения будет только один поток, например в WinMain () перед созданием любого другого потока.

Ура!

0 голосов
/ 17 ноября 2015

AfxGetApp () -> GetMainWnd ()

вернет то же самое, что AfxGetMainWnd () вернет при вызове из основного потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...