#include #include #include #include int count = 0; void * rt_loop(void * arg) { struct timespec dt_ts; dt_ts.tv_sec = 1; dt_ts.tv_nsec = 0; pthread_set_mode_np(0, PTHREAD_WARNSW); printf("start\n"); while (1) { count++; clock_nanosleep(CLOCK_REALTIME, 0, &dt_ts, NULL); printf("%d", count); printf("\n"); } return NULL; } int main(void) { pthread_attr_t attr; pthread_t rt_thread; struct sched_param sparam; mlockall(MCL_CURRENT | MCL_FUTURE); sparam.sched_priority = 16; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); pthread_attr_setschedpolicy(&attr, SCHED_FIFO); pthread_attr_setschedparam(&attr, &sparam); pthread_create(&rt_thread, &attr, &rt_loop, NULL); pthread_attr_destroy(&attr); pthread_join(rt_thread, NULL); return 0; }