2012-12-07 8 views
5

Mam aplikację GUI, która używa pthreads do wykonania ciężkiego przetwarzania w tle.Nić w tle podczas używania pthreads (nice, priority)

Podczas przetwarzania w tle GUI jest bardzo nieczytelny i myślę, że dzieje się tak dlatego, że jest on pozbawiony czasu procesora przez wątki w tle.

W systemie Windows można :: SetThreadPriority (hThread, THREAD_PRIORITY_BELOW_NORMAL) na wątkach tła i wszystko jest dobrze.

Jednak w Linuksie używam pthreads i nie mogę znaleźć dobrej alternatywy.

Rozważałem już;

  • :: sched_setscheduler (SCHED_FIFO) albo :: sched_setscheduler (SCHED_RR) - to nie jest opłacalne, ponieważ wymaga root (nie miły dla mojego GUI aplikacji) - również to uczyni wątku GUI mają zbyt dużo CPU ; Chcę tylko, aby GUI miało priorytet nad wątkami tła.
  • :: podczas korzystania coś innego niż SCHED_FIFO lub SCHED_RR, który nie jest obsługiwany (:: sched_get_priority_min (SCHED_OTHER) i :: sched_get_priority_max (SCHED_OTHER) zwracają 0)
  • mieć wiele procesów i używać :: ładny pthread_setschedparam ale. Istnieje zbyt wiele sprzężeń pomiędzy GUI i wątkami tła, aby uczynić to opłacalnym (a przeniesienie tak dużej ilości kodu do tego projektu jest znaczną ilością pracy).
  • Użyj :: setpriority, aby ponownie ładować wątki tła. To działa - ale jest bezpośrednio przed tym, co mówi dokumentacja: PThreads documentation (a więc potencjalnie mogłyby być „stałe” całego systemu w późniejszym terminie)

Jestem przekonany, że jest to dość powszechny wzorzec dla aplikacji GUI więc co przegapiłem?

Marcus.

EDIT: Dodano :: setpriority do listy opcji (dzięki ZalewaPL)

+1

"* ... zbyt wiele sprzężeń między GUI a wątkami tła ... *" Zacznę od nowa, pomyśl o projekcie, sry. – alk

+0

Nie jestem pewien, czy to jest pomocne - nie ma powodu, aby nie mieć dużego ruchu między interfejsem a wątkiem w tle, a całkiem rozsądne jest, aby nie przenosić tego do komunikacji między procesami. –

Odpowiedz

3

Ustawianie piękny wartość wątków tła do czegoś wyższego może pomóc.
Patrz: Nice-Level for pthreads?

+2

Dziękuję, wziąłem to pod uwagę, ale w dokumentacji wspomniano o procesach, a nie o wątkach. Chociaż * działa * w przypadku wątków (właśnie to testowałem) - nie cieszę się z tego, że polegam na czymś, co jest bezpośrednio sprzeczne z tym, co mówią doktorzy (http://www.kernel.org/doc/man- strony/online/strony/man7/pthreads.7.html) –

Powiązane problemy