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 |
스케줄링 정책입니다. |
nPriority |
int |
스케줄링 우선순위입니다. |
반환값
값 |
설명 |
|---|---|
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)을 사용하세요.