2012-12-07 23 views
5

Ağır arka plan işleme yapmak için pthreads kullanan bir GUI uygulamasına sahibim.pthreads kullanırken arka plan konuları (güzel, öncelikli)

Arka plan işleme çalışıyorken GUI çok yanıt vermiyor ve bunun nedeni, arka plan iş parçacıklarının CPU zamanından açılmasından kaynaklanıyor.

Windows'ta, arka plan iş parçacığındaki :: SetThreadPriority (hThread, THREAD_PRIORITY_BELOW_NORMAL) seçeneklerini kullanabilirsiniz.

Ancak Linux'ta pthreads kullanıyorum ve iyi bir alternatif bulamıyorum.

Zaten dikkate aldım;

  • :: sched_setscheduler (SCHED_FIFO) ya da :: sched_setscheduler (SCHED_RR) - bu (benim GUI uygulaması için hoş değil) kök gerektirdiğinden bu açıdan değil - bu GUI iplik yapacak olması çok fazla CPU ; Ben sadece GUI'nin arka plan iş parçacıklarına göre önceliklendirilmesini istiyorum.
  • :: pthread_setschedparam ama SCHED_FIFO dışında başka bir şey ya SCHED_RR desteklenmeyen (:: sched_getscheduler (SCHED_OTHER) ve :: sched_getparam (SCHED_OTHER) hem 0 return)
  • birden çok işlem var ve kullanımı :: güzel kullanırken. GUI ve arka plan iş parçacıkları arasında bu uygulanabilirliği sağlamak için çok fazla bağlantı var (ve bu tasarıma çok fazla kod taşımak büyük miktarda iştir)
  • Arka plan iş parçacıklarını yeniden kullanmak için :: setpriority kullanın. Bu nasıl çalışır - ama dokümantasyon söylediklerine aykırı doğrudan bağlıdır: (sistem genelinde daha sonraki bir tarihte bu yüzden potansiyel olarak "sabit" olabilir) PThreads documentation Bu GUI uygulamaları için oldukça yaygın bir model olduğuna ikna oldum

yani neyi özledim?

Marcus.

DÜZENLEME: yardımcı olabilecek yüksek bir şey arkaplan parçacığı güzel değerinin ayarlanması seçenekleri (teşekkürler ZalewaPL)

+1

"* ... GUI ve arka plan konuları arasında çok fazla bağlantı ... *" Ben sry, üzerinde tasarım düşünmeye başlardım. – alk

+0

Bunun yardımcı olabileceğinden emin değilim - kullanıcı arabirimi ile arka plan iş parçacığı arasında çok fazla trafik olmaması için bir neden yok ve bunu çapraz süreç iletişimine taşımak istememek oldukça mantıklı. –

cevap

3

listesine eklendi :: setpriority.
bu başvurun: Nice-Level for pthreads?

+2

Teşekkür ederim, bunu düşünmüştüm ama belgelerden değil, işlemlerden bahsediyor. Her ne kadar * iş parçacığı için çalışıyor olsa da (sadece test ettim) - Doğrudan doktorların söylediklerine karşı olan bir şeye güvenmekten hoşnut değilim (http://www.kernel.org/doc/man- sayfa/çevrimiçi/sayfa/man7/pthreads.7.html) –