Есть ли какой-либо аналог для Delphi, который указывает, что какой-то поток является фоновым потоком? Что касается .NET, я могу сказать SomeThread.IsBackground = true;
, и этот поток станет фоном. Спасибо заранее!Фоновые потоки в delphi
ответ
документация .net описывает IsBackground свойства как это:
Нити либо фоновый поток или передний план нить. Фоновые потоки идентичны потокам переднего плана, за исключением того, что фоновые потоки не препятствуют завершению процесса. Как только все потоки переднего плана, принадлежащие процессу, завершатся, общая среда выполнения языка завершает процесс. Любые оставшиеся фоновые потоки останавливаются и не завершаются.
Процесс Delphi завершается, когда основная функция в файле .dpr завершается. Эта основная функция всегда выполняется в контексте основного потока процессов, который является потоком, который автоматически создается системой при запуске процесса.
Итак, в Delphi нет эквивалентного имущества. Существует одна нить переднего плана, основной поток и все остальные потоки - фоновый поток, используя терминологию .net. Нить не может во время выполнения изменять состояние с переднего плана на задний план или наоборот.
Чтобы убедиться, что текущий поток является основным потоком VCL, проверьте TThread.CurrentThread.ThreadID = MainThreadID (*). Основной поток VCL должен оставаться передним потоком и является единственным потоком, в который должен быть обновлен графический интерфейс, поэтому ответ на ваш вопрос «нет».
Если вы используете последнюю версию Delphi, вы можете использовать TThread.CreateAnonymousThread и TThread.Synchronize, чтобы анонимные методы выполнялись либо в фоновом потоке, либо в основном потоке VCL, соответственно.
*) Обратите внимание, что свойство класса CurrentThread было добавлено только в несколько версий. Если вы используете старую версию Delphi, такую как Borland Delphi 7, вы можете выполнить эту проверку только в рамках метода выполнения потока (или любого метода, который вызывается Execute и т. Д.).
В Delphi каждая нить, кроме основной нити, является фоновой нитью. Вот почему вы можете обновлять графический интерфейс только из основного потока.
- 1. фоновые потоки в JQuery,
- 2. Фоновые потоки в WCF
- 3. iOS: Фоновые потоки/многопоточность?
- 4. Java EE и фоновые потоки
- 5. Does Application.Exit() убивает фоновые потоки?
- 6. Как остановить фоновые потоки приложения в WebSphere
- 7. Delphi, ClientDataSet и потоки
- 8. В Delphi есть потоки TDataSet?
- 9. Как создать потоки под Python для Delphi
- 10. Android CursorAdapters, ListViews и фоновые потоки
- 11. Фоновые потоки, не начинающиеся до выключения сервера
- 12. GetOpenFileName() убивает мои фоновые открытые потоки :(
- 13. App Engine - фоновые потоки не работают
- 14. iOS быстрые фоновые потоки, блокирующие основную нить
- 15. Как добавить фоновые изображения в формы Delphi
- 16. ASP.NET и длинные фоновые потоки - как они смешиваются?
- 17. Потоки Delphi после многих исполнений
- 18. Как создать неопределенные фоновые потоки в цикле в C# .NET
- 19. Возобновление подвесной потоки в Delphi 2010?
- 20. Как увидеть фоновые потоки в отладчике Visual Studio 2010
- 21. Нужно ли закрывать все фоновые потоки в Android?
- 22. Фоновые потоки автоматически заканчиваются через 3 минуты в xamarin iOS
- 23. Как сборка мусора и фоновые потоки взаимодействуют в .NET?
- 24. Фоновые потоки Heavy TPL производят лаги в пользовательском интерфейсе WPF
- 25. C# - Как добавить код в фоновые потоки перед их запуском?
- 26. Фоновые темы
- 27. Как закрыть все фоновые потоки приложения Windows Service?
- 28. Runnning SpriteKit обрабатывает фоновые потоки для улучшения использования ЦП
- 29. Как закрыть анонимные потоки в Delphi на приложении закрыть?
- 30. Как узнать, кто создает все ваши потоки в программе delphi?
В Delphi каждая нить, кроме основной нити, является фоновой нитью. Вот почему вы можете обновлять графический интерфейс только из основного потока. – jpfollenius
В Windows нет ничего похожего на «фоновый поток». Вы можете указать приоритет потока (SetThreadPriority), чтобы иметь некоторый поток, предварительно упущенный более критичными, когда это необходимо (т. Е. Поток, который генерирует и печатает отчет, может иметь более низкий приоритет, чем основной поток, который обрабатывает ввод пользователя). Похоже, что реализация .NET реализовала упрощенный подход и просто «убивает» «фоновый» поток, когда программа выходит (она работает из-за GC), IMHO - это опасный подход, потоки должны выходить чисто, когда это возможно. См. Http://msdn.microsoft.com/en-us/library/windows/desktop/ms685100(v=vs.85).aspx –
Если программа завершает работу, потоки должны выйти чисто, когда это абсолютно необходимо, чтобы они делали это , например. чтобы файлы, открытые для записи, были очищены. Если нет явной причины для обеспечения чистого выхода, зачем беспокоиться? –