Фоновые темы в Delphi - PullRequest
       1

Фоновые темы в Delphi

1 голос
/ 10 февраля 2012

Есть ли какой-нибудь аналог для Delphi, который указывает, что какой-то поток является фоновым потоком? Что касается .NET, я могу сказать SomeThread.IsBackground = true;, и эта тема станет фоновой. Заранее спасибо!

Ответы [ 3 ]

8 голосов
/ 10 февраля 2012

.net документация описывает свойство IsBackground , например:

Поток - это фоновый поток или поток переднего плана. Фоновые потоки идентичны приоритетным, за исключением того, что фоновые потоки не препятствуют завершению процесса. Как только все потоки переднего плана, принадлежащие процессу, завершаются, среда выполнения общего языка завершает процесс. Все оставшиеся фоновые потоки останавливаются и не завершаются.

Процесс Delphi завершается, когда завершается основная функция в файле .dpr. Эта основная функция всегда выполняется в контексте основного потока процесса, то есть потока, который автоматически создается системой при запуске процесса.

Итак, в Delphi нет эквивалентного свойства. Существует один основной поток, основной поток и все остальные потоки являются фоновыми, используя терминологию .net. Поток не может во время выполнения изменить состояние с переднего на задний план или наоборот.

3 голосов
/ 10 февраля 2012

Чтобы убедиться, что текущий поток является основным потоком VCL, проверьте TThread.CurrentThread.ThreadID = MainThreadID (*).Предполагается, что основной поток VCL остается приоритетным и является единственным потоком, в котором необходимо обновить графический интерфейс, поэтому ответ на ваш вопрос - «нет».

Если вы используете последнюю версию Delphiоднако вы можете использовать TThread.CreateAnonymousThread и TThread.Synchronize, чтобы анонимные методы выполнялись либо в фоновом потоке, либо в основном потоке VCL соответственно.

*) Обратите внимание, что свойство класса CurrentThread былодобавил только несколько версий назад.Если вы используете старую версию Delphi, такую ​​как Borland Delphi 7, вы можете выполнить эту проверку только из метода execute потока (или из любого метода, который вызывается Execute и т. Д.).

1 голос
/ 10 февраля 2012

В Delphi каждый поток, кроме основного, является фоновым. Вот почему вы можете обновлять графический интерфейс только из основного потока.

...