PureBasic

Threaded


Синтаксис
Threaded[.<type>] <variable[.<type>]> [= <constant expression>] [, ...]

Описание


Ключевое слово Threaded позволяет создать привязанные к потоку и сохраняющие свои значения: Переменные, Массивы (кроме многомерных массивов), Связные списки или Хеш-карты. Это означает, что у каждого потока будет своя собственная версия объекта. Это полезно только при написании многопоточных программ. Если после ключевого слова Threaded задан тип, то для этого объявления тип используемый по умолчанию изменяется на указанный.

Каждой переменной может быть присвоено значение по умолчанию, непосредственно назначенное ей, но оно должно быть постоянным значением, то есть число или константа а не значение другой переменной. Потоковая инициализация выполняется при первом запуске потока. Это означает, что при объявлении и назначении многопоточной переменной в одно и то же время переменная присваивается всем потокам. См. Пример 2.
При объявлении многопоточного массива параметр измерения должен быть постоянным значением.

Многопоточный объект не может быть объявлен в процедуре, его область видимости всегда глобальная.

Более подробно про переменные, объявления, типы данных и области видимости можно почитать здесь.

Пример: 1 С переменными

Threaded Counter

Counter = 128

Procedure Thread(Parameter)

    Debug Counter ; Отобразит ноль, так как этот поток пока не использовал эту переменную
    Counter = 256
    Debug Counter ; Выведет на экран 256

EndProcedure

Thread = CreateThread(@Thread(), 0)
WaitThread(Thread) ; Ждём завершения потока

Debug Counter ; Отобразит 128, даже если счётчик Counter изменялся в потоке

Пример: 2 Все потоки

Threaded Counter = 128 ; Объявление для всех потоков

Procedure Thread(Parameter)

    Debug Counter ; Будет отображаться 128, потому что программа запущена, запускает поток тоже
    Counter = 256
    Debug Counter ; Будет отображаться 256

EndProcedure

Thread = CreateThread(@Thread(), 0)
WaitThread(Thread) ; Ждать окончания потока

Debug Counter ; Будет отображаться 128, даже если счетчик был изменен в потоке