set_rt_thread_priority

이 함수는 라이브러리가 실시간 데이터를 받고 실시간 콜백을 실행할 때 쓰는 운영 체제 스케줄링 우선순위를 설정합니다. 설정은 다음 connect_rt_control 호출부터 적용됩니다. 이 함수를 호출하지 않으면 라이브러리는 운영 체제의 기본 스케줄링을 사용합니다.

정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션

bool set_rt_thread_priority(int nPolicy, int nPriority) { return _set_rt_thread_priority(_rbtCtrlUDP, nPolicy, nPriority); };

매개변수

매개변수 이름

자료형

설명

nPolicy

int

스케줄링 정책입니다.
Linux: SCHED_FIFO, SCHED_RR, SCHED_OTHER 중 하나입니다.
Windows: 0입니다.
-1은 두 운영 체제 모두에서 기본 스케줄링으로 되돌립니다.

nPriority

int

스케줄링 우선순위입니다.
Linux: SCHED_FIFO나 SCHED_RR이면 해당 정책의 sched_get_priority_min부터 sched_get_priority_max까지의 값(1~99)이고, SCHED_OTHER이면 0입니다.
Windows: THREAD_PRIORITY_* 수준인 THREAD_PRIORITY_IDLE (-15), THREAD_PRIORITY_LOWEST (-2), THREAD_PRIORITY_BELOW_NORMAL (-1), THREAD_PRIORITY_NORMAL (0), THREAD_PRIORITY_ABOVE_NORMAL (1), THREAD_PRIORITY_HIGHEST (2), THREAD_PRIORITY_TIME_CRITICAL (15) 중 하나입니다.
nPolicy가 -1이면 무시됩니다.

반환값

값

설명

1

설정이 저장되었으며 다음 connect_rt_control 호출부터 적용됩니다.

0

아무것도 바뀌지 않았습니다. 실시간 제어(Real-time Control)가 연결되어 있거나, 정책이나 우선순위가 올바르지 않거나, (Linux) 프로세스에 요청한 실시간 우선순위를 사용할 권한이 없습니다. 값이 올바르지 않거나 허용되지 않으면 라이브러리가 그 이유를 표준 오류에 출력합니다.

주의

  • 이 함수는 connect_rt_control을 호출하기 전이나 disconnect_rt_control을 호출한 뒤에 호출하세요. 실시간 제어가 연결되어 있는 동안에는 0을 반환합니다.

  • connect_rt_control이 실행될 때 우선순위를 적용할 수 없으면 connect_rt_control은 0을 반환하고 실시간 연결을 닫습니다.

  • Linux에서 SCHED_FIFO와 SCHED_RR에는 실시간 스케줄링을 사용할 권한이 필요합니다. CAP_SYS_NICE 권한(capability)이 있거나, RLIMIT_RTPRIO 제한이 nPriority 이상이어야 합니다(예: ulimit -r로 설정).

예제

#include <sched.h>

// SCHED_FIFO 우선순위 80으로 RT 데이터를 받고 RT 콜백을 실행합니다(Linux).
if (!drfl.set_rt_thread_priority(SCHED_FIFO, 80)) {
    printf("SCHED_FIFO 80 is not available.\n");
}
if (drfl.connect_rt_control("192.168.137.100", 12347)) {
    drfl.start_rt_control();
}

이 예제에서는 RT 채널을 연결하기 전에 우선순위를 설정하므로 그 연결에 적용됩니다.

팁

  • 다음 연결부터 기본 스케줄링으로 되돌리려면 set_rt_thread_priority(-1, 0)을 사용하세요.