BroadcastChannelSubscribe
| BroadcastChannelSubscribe (Доставка сообщений) | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||
Функция подписывается на сообщения глобального канала сообщений, заданного по его имени (первый аргумент). Если указана форма-получатель сообщений, они будут приходить в виде события OnMessage (OnMessage) в момент, когда форма ожидает действий пользователя (idle). Если форма не указана, программе необходимо получать сообщения самостоятельно с помощью функции BroadcastChannelReceiveMessage. Подписка действует для текущего потока, если сообщения не забираются, они будут накапливаться на сервере. Для отказа от подписки, используйте BroadcastChannelUnsubscribe. Подписка удаляется автоматически, когда поток с подпиской заканчивает работу. Если указана форма и она будет закрыта, но поток продолжит работать, подписка не будет отменена (однако сообщения приходить не будут, так как отсутствует форма). Функция возвращает цифровой идентификатор канала, по которому к нему можно выполнять обращения (чуть быстрее, чем по имени). Идентификатор корректен до момента вызова BroadcastChannelUnsubscribe или завершения потока подписки.
Синтаксис
BroadcastChannelSubscribe(<Имя канала (STRING)>,<Форма-получатель или ее серийный номер (FORM,INT)>=0):<Числовой идентификатор канала (INT)>
Аргументы
<Имя канала (STRING)>- Произвольное имя канала для подписки.<Форма-получатель или ее серийный номер (FORM,INT)>- (необязательный аргумент) Указание на форму, если необходимо поулчать сообщения в виде события OnMessage. Форма может быть задана серийным номером или самим объектом формы.
Возвращаемое значение
Возвращает числовой идентификатор канала на сервере.
Примеры
//Пример простого отправителя и подписчика в одном фрагменте текста.
Function Подписчик()
аКодКанала:=BroadcastChannelSubscribe("Канал");
аНум:=0;
While 1 Do
If not BroadcastChannelReceiveMessage(аКодКанала,100,аНум) Then
Continue;
EndIf;
Message("Получено сообщение с ID "+аНум);
If аНум=100 Then
Break;
EndIf;
EndDo;
BroadcastChannelUnsubscribe(аКодКанала);
Message("Поток закончил работу...");
EndFunction
Mutex.ExecuteFunctionInSeparateThread("Подписчик",0);
аКодКанала:=BroadcastChannelSubscribe("Канал");
ИдСообщения:=1;
While ИдСообщения<=100 Do
If BroadcastChannelSendMessage(аКодКанала,ИдСообщения,"")>0 Then
ИдСообщения:=ИдСообщения+1;
EndIf;
EndDo;
//Ожидания завершения потока после принятия сообщения 100
//Без этой паузы, поток можен быть завершен форсировано, так как текущий (родительский) поток будет завершен
Sleep(1000);
//Будет выведено:
//Получено сообщение с ID 1
//Получено сообщение с ID 2
//..
//Получено сообщение с ID 100
//Поток закончил работу...