2011-10-13 109 views
1

我正在处理我的应用程序中的线程优先级。有一个实时线程计划在SCHED_RR。我使用pthread_setschedparam来设置此策略及其优先级。 pthread_setschedparam将线程ID作为第一个参数,因此在创建线程后,我可以设置其实时优先级。从创建者线程设置线程的“不错的水平”?

但是,另一个线程应该有一个很好的级别,但没有实时调度。我可以用

pid_t tid; 
tid = syscall(SYS_gettid); 
int ret = setpriority(PRIO_PROCESS, tid, nicelevel); 

其漂亮的级别设置为ǹicelevel,但如果我修改线程函数以包含上面的线,这是唯一的工作。有没有办法从创建线程的方法中设置好级别?

谢谢!

回答

0

boost::thread类公开native_handle()方法。在基于并行线程的实现,这种方法威力返回tid(也可能返回pthread_t *,取决于handle意义在这种特殊情况下)。

如果确实返回tid,使用它应该可以解决您的问题。否则,您可能需要将gettid()从线程函数返回的值传递到全局范围,如this answer所示。