home   contents  previous      next        up

Сопроцессы ОС PARIX

Сопроцесс описывается так же, как и обычная функция. Подпрограмма
Thread_t *StartThread(int (* func) (), int StackSize, int *Error, int ArgSize, ..)
активируют функцию func как сопроцесс, который начинает исполняться параллельно с процессом, вызвавшим его. Процесс, инициировавший выполнение сопроцесса, не может ни определить, ни изменить состояние сопроцесса без явно программируемых возможностей (например, каналов) или отладочных функций WaitBreak, ContinueBreak, StepThread, StopThread, SetBreak, ClearBreak. Для сопроцесса выделяется память под стек, желаемый размер (в байтах) которого задается параметром StackSize. ArgSize указывает размер (в байтах) параметров, передаваемых функции func. StartThread возвращает указатель на созданный дескриптор сопроцесса, который можно использовать только для того, чтобы различать сопрограммы выполняющиеся параллельно. Функция возвращает NULL-указатель и код ошибки в Error , если по какой-то причине нельзя создать сопроцесс. Функция
Thread_t *WaitThread (Thread_t *Tptr, int *Result)
приостанавливает выполнение процесса и ожидает, пока не завершится сопроцесс, указываемый параметром Tptr. Значение, возвращенное соответствующей функцией сопроцесса, передается через параметр Result. Если Tptr имел значение NULL, то выполнение процесса приостанавливается до тех пор, пока не завершится произвольный сопроцесс из среды процесса. В этом случае функция возвращает указатель на дескриптор завершившегося сопроцесса. Чтобы освободить память, выделенную ему, и получить возвращ§нное им значение, необходимо ещ§ раз обратиться к WaitThread, но уже с указателем на дескриптор завершившегося сопроцесса. Например,
Thread_t tp = WaitThread(NULL, &result); WaitThread (tp, &result);


home   contents  previous      next        up