Класс Thread (Поток) предназначен для организации потоков в программе. Поток представляет собой фрагмент программного кода, который может выполняться независимо и параллельно основной программе. Например, можно создать поток, который будет управлять двигателями в то время как основная программа будет опрашивать датчики или ожидать действий пользователя.
Методы класса Thread:
Yield
Thread.Yield()
Уступает процессор другому потоку. Команда дает знать другим потокам, что процессор простаивает и они могут более активно использовать его ресурсы. Потоки на самом деле не выполняются параллельно, процессор переключается между потоками настолько быстро, что создается иллюзия параллельного их выполнения. Если в потоке выполняется какое-то ожидание или бездействие, с помощью этой команды можно явно сообщить об этом остальным потокам для повышения их скорости работы.
CreateMutex
Thread.CreateMutex()
Создать мьютекс (сокр. от «mutual exclusion» — взаимное исключение), который может быть использован для синхронизации потоков. Мьютекс может быть только создан, удалить его нельзя. Лучше всего создавать все необходимые мьютексы в начале программы и держать их номера в переменных.
Возвращает: Идентификатор мьютекса, который будет использоваться в дальнейшем для блокировки и разблокировки потоков.
Lock
Thread.Lock(id)
Пытается заблокировать указанный мьютекс. Установка блокировки мьютекса не позволит никакому другому потоку повторно установить на него блокировку.
id — Идентификатор мьютекса, полученный от метода CreateMutex().
Unlock
Thread.Unlock(id)
Снимает блокировку указанного мьютекса. Команду можно использовать только в случае, если блокировка мьютекса действительно была ранее установлена.
id — Идентификатор мьютекса, полученный от метода CreateMutex().
События класса Thread:
Run
Thread.Run
Создаёт новый поток. Просто назначьте подпрограмму и она начнет выполняться в качестве независимого потока (пример Thread.Run = MYSUB). Любая подпрограмма может быть запущена как независимый поток, однако, одна подпрограмма может быть запущена как поток только один раз, два потока из неё сделать нельзя. При использовании Thread.Run() в то время, как подпрограмма уже работает, вызов потока поставится в очередь до тех пор, пока она не завершит свою работу. Это обеспечивает корректную работу, но запуск потока может произойти позже запланированного. Все запущенные потоки остановятся, как только основная программа завершит свою работу.