Ich arbeite an Thread-Prioritäten in meiner Anwendung. Es ist ein Echtzeit-Thread mit geplant SCHED_RR
. ich benutze pthread_setschedparam
diese Politik und die Priorität dafür festzulegen. pthread_setschedparam
übernimmt die Thread-ID als erstes Argument, also nach dem Erstellen eines Threads mit boost::thread
Ich kann seine Echtzeitpriorität einstellen.
Ein anderer Thread sollte jedoch ein bestimmtes Level haben, aber keine Echtzeitplanung. ich kann nutzen
pid_t tid;
tid = syscall(SYS_gettid);
int ret = setpriority(PRIO_PROCESS, tid, nicelevel);
um sein schönes Niveau auf zu setzen ǹicelevel
Dies funktioniert jedoch nur, wenn ich die Thread-Funktion so modifiziere, dass sie die darüber liegenden Zeilen enthält. Gibt es eine Möglichkeit, das nette Niveau von der Methode festzulegen, die den Thread erstellt?
Vielen Dank!
Antworten:
0 für die Antwort № 1Das boost :: thread Klasse macht ein Publikum frei native_handle()
Methode. In einer pthreads-basierten Implementierung diese Methode Macht zurückgeben tid
(es auch Macht zurückgeben pthread_t *
abhängig von der Bedeutung von handle
in diesem besonderen Fall).
Wenn es tatsächlich einen zurückgibt tid
Wenn Sie es verwenden, sollte Ihr Problem gelöst sein. Andernfalls müssen Sie wahrscheinlich den von übergebenen Wert weiterleiten gettid()
von der Thread-Funktion zum globalen Gültigkeitsbereich, wie diese Antwort schlägt vor.