Как знать, работает ли код на потоке ui или рабочем потоке (Visual C++ MFC)

Простой способ:

public IDictionary<T, V> toDictionary<T, V>(Object objAttached)
{
    var dicCurrent = new Dictionary<T, V>();
    foreach (DictionaryEntry dicData in (objAttached as IDictionary))
    {
        dicCurrent.Add((T)dicData.Key, (V)dicData.Value);
    }
    return dicCurrent;
}
5
задан Javier De Pedro 27 May 2009 в 08:45
поделиться

2 ответа

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

if(GetCurrentThreadId() == AfxGetApp()->m_nThreadID)
{
    //Main Thread
}
else
{
    //Not Main Thread
}
13
ответ дан 18 December 2019 в 09:10
поделиться

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

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

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

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

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

Ура!

5
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: