Задание параллельного выполнения задач в разных потоках без ожидания выполнения каждой из задач с уничтожением потоков в конце
asyncprocessfree <задача 1> ... <задача 2> end;
Задание параллельного исполнения без ожидания результатов всех операций с автоматическим уничтожением потоков после их отработки (для однократного режима). Задачи задаются в виде обычных пользовательских функций без параметров, но для них будут недоступны операции записи в глобальные переменные. Внутри задач можно организовывать аналогичным образом подзадачи, которые будут выполняться параллельно.
Для чтения данных в постоянном режиме от сервера (например в главном скрипте видеокадра) следует использовать функцию asyncprocess - поскольку в этом случае постоянное создание и выполнение потоков нежелательно. Для однократной записи данных при выполнении действия внутри блока в асинхронном режиме следует использовать функцию asyncprocessfree, чтобы потоки самоуничтожились после выполнения операции.
При этом следует помнить: для секций process и asyncprocess потоки выполнения создаются в точке использования секции. То есть, например, если секция параллельного исполнения находится в графическом скрипте двух блоков, то для КАЖДОГО из этих блоков будут создаваться по N потоков, находящихся в режиме ожидания. Для таких случаев следует использовать секции с уничтожением потоков (asyncprocessfree, processfree) или же следует вынести секцию параллельного выполнения в функцию в скрипте головной страницы проекта. Альтернативой является создание потока в одном месте и использование очереди операций, заполняемой из блоков и выполняемой исполняющим потоком.
procedure A; seterrorstr("A"); end; procedure B; seterrorstr("B"); end; asyncprocessfree A; B; end; seterrorstr("end of op");
В примере определяются пользовательские функции, после этого организуется параллельное выполнение в разных потоках. После завершения обработки секции происходит уничтожение параллельных потоков.