3.3.3. "Рабочие" (work) процедуры.

    "Рабочая" процедура (work-процедура) - это специальная функция, определяемая программой и вызываемая Xt, когда очередь событий пуста. Такие функции используются, как правило, для выполнения различных действий и вычислений в течении очень короткого времени. Как и таймер, каждая work-процедура должна быть зарегистрирована. Для этого используется, например, функция

XtWorkProcId XtAppAddWorkProc (XtAppContext prAppContext, XtWorkProc pProcedure, XtPointer pUserData);

    Здесь, как обычно, prAppContext - контекст приложения, pProcedure определяет вызываемую функцию, а pUserData задает передаваемые последней данные. Функция возвращает дескриптор "рабочей" процедуры, который, затем можно использовать для ее удаления.

    Каждая work-процедура должна иметь следующий прототип:

Boolean WorkProc (XtPointer pUserData);

    Здесь pUserData совпадает с третьим аргументом функции XtAppAddWorkProc( ).

    Если work-процедура возвращает True, то Xt автоматически удаляет ее после того, как она завершит свою работу. В следующий раз, когда очередь событий приложения будет пуста, work-процедура не будет вызвана. Если же возвращаемое значение есть False, то процедура будет вызываться каждый раз, когда в очереди событий ничего нет. Удалить "рабочую" процедуру можно и явно, используя функцию XtRemoveWorkProc (XtWorkProcId nId), задавая в качестве аргумента nId идентификатор функции, возвращенный процедурой XtAppAddWorkProc( ).

    Приложение может зарегистрировать несколько work-процедур.

    Для регистрации "рабочей" процедуры можно использовать также и процедуру XtAddWorkProc( ), которая отличается от описанной выше процедуры XtAppAddWorkProc( ), только отсутствием аргумента prAppContext.