PureBasic
PureBasic - Thread (Поток)
Обзор
Поток - это часть программы, которая выполняется асинхронно, в фоне этой программы (параллельно с ней). Это значит, можно выполнять длительные операции (сжатие данных, обработку изображений, и т.д.) не останавливая всю программу, позволяя пользователю продолжать делать другие операции. Поток выполняется внутри вашей программы, это не другой процесс. Когда главная программа завершается, все потоки уничтожаются. В PureBasic поток это просто процедура, вызываемая асинхронно. Поток выполняется пока процедура не завершится.
Потоки могут быть полезны например когда в вашей программе имеются операции с разным временем отклика, например обработка данных и интерфейс пользователя (вы готовы подождать, пока данные обработается, но интерфейс пользователя при этом должен всегда откликаться).
У PureBasic есть особая настройка компилятора для создания потокобезопасного исполняемого файла. (ключ командной строки /THREAD или "создать потокобезопасный исполняемый файл" в настройках компилятора в IDE). Без этого режима некоторые функции (а также работа со строками) выполняются быстрее, но небезопасно при использовании в потоках. Создавать потоки без этого режима всё равно возможно, но не рекомендуется, так как даже что-нибудь простое вроде доступа к строке текста может быть опасно и должно быть защищено. Включение этой опции делает эти вещи безопасными внутри потоков, но ценой некоторого уменьшения скорости. Поэтому решение использовать потоки или нет следует принимать с осторожностью, а режим потоков следует использовать только там, где он действительно нужен.
Примечание: Потоки нужно использовать осторожно, потому что у вас может быть ситуация множественного доступа к разделяемым ресурсам (памяти, переменным, файлам, и т.д.) и вам нужно обеспечить гарантии отсутствия проблем из-за этого. Для синхронизации доступа к таким разделяемым ресурсам можно использовать функции работы с Мьютексами этой библиотеки.
С помощью ключевого слова Threaded можно создавать потоковые объекты (Переменные, Массивы, Связанные списки и Хеш-карты). У каждого потока будет свой экземпляр такого объекта.
Примечание: Не используйте DirectX (команды работы со спрайтами) внутри потоков (ограничение MS Windows)! Если вам нужно отобразить графику в потоках, используйте библиотеки Images и 2DDrawing.
Список команд
CreateMutex
CreateSemaphore
CreateThread
FreeMutex
FreeSemaphore
IsThread
KillThread
LockMutex
PauseThread
ResumeThread
SignalSemaphore
ThreadID
ThreadPriority
TryLockMutex
TrySemaphore
UnlockMutex
WaitSemaphore
WaitThread
Пример
Thread.pb
Поддерживаемые OS
Все