Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform | страница 36
> const struct sched_param *param);
>int pthread_attr_setschedpolicy(pthread_attr_t *attr,
> int policy);
С параметром policy все просто — это либо SCHED_FIFO, либо SCHED_RR, либо SCHED_OTHER.
Параметр param — структура, которая содержит единственный элемент: sched_priority. Задайте этот параметр путем прямого присвоения ему значения желаемого приоритета.
Плавали, знаем. :-)
На том, что QSSL зарезервировала нулевой приоритет только для «холостого» потока, уже «прокололось» немало программистов. Поток с нулевым приоритетом просто не сможет выполняться.
Давайте рассмотрим ряд примеров. Будем считать, что в обсуждаемой программе подключены нужные заголовочные файлы (>
и >
), а также что поток, который предстоит создать, называется new_thread(), и для него существуют все необходимые прототипы и определения.
Самый обычный способ создания потока — просто оставить везде значения по умолчанию:
>pthread_create(NULL, NULL, new_thread, NULL);
В вышеупомянутом примере мы создали наш новый поток со значениями параметров по умолчанию и передали ему NULL в качестве его единственного параметра (третий NULL в указанном выше вызове pthread_create()).
Вообще говоря, вы можете передавать вашему новому потоку что угодно через параметр arg. Например, число 123:
>pthread_create(NULL, NULL, new_thread, (void*)123);
Более сложный пример — создание «обособленного» (detached) потока с диспетчеризацией карусельного типа (RR) и приоритетом 15:
>pthread_attr_t attr;
>// Инициализировать атрибутную запись
>pthread_attr_init(&attr);
>// Установить «обособленность»
>pthread_attr_setdetachstate(&attr,
> PTHREAD_CREATE_DETACHED);
>// Отменить наследование по умолчанию (INHERIT_SCHED)
>pthread_attr_setinheritsched(&attr,
> PTHREAD_EXPLICIT_SCHED);
>pthread_attr_setschedpolicy(&attr, SCHED_RR);
>attr.param.sched_priority = 15;
>// И, наконец, создать поток
>pthread_create(NULL, &attr, new_thread, NULL);