engelleme LoadImage() 'ı çağıran düğmeyi tıklatırım, UI yanıt vermiyor. Periyodik olarak "ping" mesajını debug çıkışı olarak görüyorum ancak UI kilitleniyor, hiçbir şeye tepki vermiyor. İş parçacığım neden ayrı ayrı çalışmıyor? CameraThread, public QThread 'dan türetilmiştir. Qb kitaplıkları ve Ubuntu 10.04 (x86) depolarından QT Creator ile birlikte gcc sürüm 4.4.3 (Ubuntu 4.4.3-4ubuntu5) kullanıyorum.QThread bir iş parçacığı başlayarak bir düğme için bir yuvası vardır, basit bir formu UI sahip ana uygulama
cevap
Kısa cevap (bir neden olmadan) korunur: değil run()
aThread->start();
arayarak iplik başlayın ve en koşmak iplik emin() yöntemi korunmaktadır (kamu değil). Bu öncelikli zamanlama sağlar ve gerçekte kendi iplik bağlamında run()
yöntem çalıştırır olarak
açıklama
Calling start()
is the correct way, iplik başlatın.
birçok kişi
- QThread kendisi değil QThread kullanırken düşmek Bir iş parçacığı. Bu bir iplik etrafında sarıcı bu .. bize getiriyor olduğunu
- sinyaller/
CameraThread
sınıfında tanımlanan yuvaları ille ondan denilen sadece koşmak() yöntemini ve yöntemleri hatırlamak parçacığının bağlamda aday olmayacak ayrı bir iş parçacığında çalışıyorlar.
IMHO, vakaların çoğunluğunda yılında QThread sınıflara gitmek için yol değil olduğunu. Aşağıdaki kod ile çok daha basit yapabilirsiniz ve size birçok baş ağrısı kurtaracaktır.
Ayrıca bu konuyla ilgili Qt blog numaralı makaleyi okuyun.
Thread-> start() 'ı çağırmanız gerekir. Çalışmıyor ... run, thread için bir giriş noktasıdır. Konu başlangıç ile başlatıldı. Doğrudan koş dediniz, bu yüzden gui'nizi engelliyorsunuz. QThread belgelerini kontrol edin. Sanal hükümsüz QThread :: run()
Sorunun, QtCore.QThread._init __ (self) yapıcısını çağırmamanız olabileceğini düşünüyorum. Bende aynı sorun vardı. Ayrıca, başlangıç işlevini geçersiz kılmamalısınız, run() işlevini geçersiz kılmalısınız. Bu, sahip olduğum aynı sorunu çözdü. Herhangi bir uyku() gecikmesi olmadan bile, pencere yanıt vermelidir.
Hayır, benim sorunum run() yerine çağırıyordu başlangıç (). Zaten koşmayı geçersiz kıldım(). –
- 1. Bir aramayı klonlamak, ana iş parçacığı
- 2. Bir iş parçacığı veya iş parçacığı için bir DAO DAO?
- 3. Farklı bir UI iş parçacığı içinde bir DocumentViewer içeriğini yazdırma
- 4. Bir sunucudan bir iş parçacığı oluşturabilir miyim?
- 5. Ana İş Parçacığı Denetimi: Bir arka plan iş parçacığı üzerinde UI API çağrısı: - [UIApplication temsilci]
- 6. Django formu basit bir modele sahip
- 7. Bir UI iş parçacığının tanımı nedir? Bir .NET uygulamasında yalnızca bir UI iş parçacığı var mı?
- 8. Bir daemon iş parçacığı yalnızca
- 9. Bir iş parçasında TopMost formu?
- 10. Uykuda bir QThread uyandırın mı?
- 11. Ana iş parçacığı kapalı bir segue gerçekleştirmek için tamam mı?
- 12. Bir "gerçek" iş parçacığı
- 13. Bir iş parçacığı oluşturma işlevine
- 14. Ana iş parçacığı
- 15. Basit bir uygulama için bir PHAR oluşturma
- 16. QThread sonsuz döngüsünü düzgün bir şekilde kesmek için
- 17. AudioServicesPlaySystemSound ve ana iş parçacığı
- 18. Android, benim saniye sayacımı güncelleştirecek basit bir iş parçacığı oluşturma
- 19. WPF iş parçacığı: bir denetimin veri içeriğini UI olmayan bir iş parçacığında güncelleyebilir miyim?
- 20. UI iş parçacığı üzerinde görev sürdürme, arka plan iş parçacığı
- 21. CountdownTimer UI iş parçacığı güncelleştiren çalışan iş parçacığı içinde
- 22. Uygulama sınıfı, UI iş parçacığı üzerinde çalışıyor mu?
- 23. Bu basit bir test Scala uygulamaya sahip
- 24. Basit bir takvim uygulama
- 25. Bir iş parçacığı özellikle blok
- 26. Bir BackgroundWorker ile ana iş parçacığı arasında nesne paylaşımı
- 27. başka bir iş parçacığı (Net)
- 28. UEFI'da bir iş parçacığı oluşturma
- 29. .NET'te bir iş parçacığı başlatılıyor
- 30. İş parçacığı uyurken bir tuşa basmak için 'Dinle'
QT belgeleri, QThread'in alt sınıflara göre kullanımını açıklar. Neden bu kötü bir fikir? –
@Atilla - Casey'nin cevabında QT Blog bağlantısını okursanız, "Yanlış yapıyorsunuz" başlıklı başlıkta bulabilirsiniz. QThread'in alt sınıflaması hakkındaki QT belgelerinin neden iş parçacığı yapmak için doğru bir yol olmadığıyla ilgili bir tartışma.Ayrıca, blog girişini doğru bir şekilde okursam, orijinal Qt belgelerini yazan kişi tarafından yazılır. –
Evet, bu doğru. Temel olarak, Qt belgeleri yanıltıcıdır ve sonuç olarak, birçok kişinin hacky şeyleri yapmalarına yol açmıştır (Qthread yapıcısında movetoThread (bu) gibi) ve bu da hattın aşağısında sorunlara neden olur. Umarım dokümanlar yakında güncellenir. – Casey