"Рабочая" процедура (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.