Получить объект TThread для в настоящее время выполняющегося потока?

15
задан 3 revs, 3 users 100%Serkan 17 July 2017 в 06:50
поделиться

6 ответов

Последняя версия Delphi, Delphi 2009, имеет свойство класса CurrentThread на классе TThread.

Это возвратит надлежащий объект потока Delphi, если это будет собственный поток. Если поток будет "посторонним" потоком, т.е. созданным использованием некоторого другого механизма или на обратном вызове от стороннего потока, то он создаст поток обертки вокруг дескриптора потока.

21
ответ дан 1 December 2019 в 00:27
поделиться

Из Вашего собственного ответа это кажется, возможно, что Вы только хотите "определить при выполнении в основном потоке или не", в этом случае можно просто использовать

if Windows.GetCurrentThreadId() = System.MainThreadID then
// ...

, Хотя это не будет работать от DLL, созданного с Delphi, если это было загружено рабочим потоком.

23
ответ дан 1 December 2019 в 00:27
поделиться

Я использую своего собственного потомка TThread, который регистрирует себя в глобальном списке, защищенном с блокировкой.

Тот путь, метод в этом потомке может обойти список и добраться, TThread дают идентификатор.

4
ответ дан 1 December 2019 в 00:27
поделиться

Ответ на мой собственный вопрос. Я предполагаю, что не возможно получить объект TThread из идентификатора. Это возможно при помощи глобальной переменной. Затем сравнивая его дескриптор и идентификатор текущего потока, можно определить при выполнении в основном потоке или нет.

0
ответ дан 1 December 2019 в 00:27
поделиться

Разве текущее выполнение не распараллелило бы быть тем, от которого Вы пытаетесь выполнить функцию?

0
ответ дан 1 December 2019 в 00:27
поделиться

Вы могли сохранить указатель экземпляра TThread в контексте текущего потока через вызов API TlsSetValue и затем получить его с помощью TlsGetValue. Однако обратите внимание, что это будет только работать, при попытке получать/хранить экземпляр TThread текущий поток.

0
ответ дан 1 December 2019 в 00:27
поделиться
Другие вопросы по тегам:

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