Genel teori, Thread, QRunnable ve QThreadPool biliyorum. Her şey nasıl uyuyor? QRunnable örneği oluşturulduğunda ve ThreadPool'a atandığında, bir iş parçacığı başlatmak ne demektir? Birden fazla iş parçacığı aynı QRunnable'a erişebilir mi? Bir QRunnable zorunlu olarak bir çalışan iş parçacığı ile bire bir eşleştiriyor mu?Konular, QRunnable ve QThreadPool, ayrıntılara sığamıyorum
cevap
QRunnable, ayrı bir iş parçacığında gerçekleştirilmesini istediğiniz görevi kapsüller. Bu görevi çalıştığı iplik biliyor ya parçacıkları arasında paylaşmak gerekiyorsa, o zaman muhtemelen QThreadPool güçlendirmek için tasarlanmıştır olandan daha karmaşık bir şey yapıyoruz. Bu durumda, doğrudan QThread kullanarak özel davranışlar yaratabilirsiniz. Bir QThreadPool ile bir QRunnable başlatılması, havuzdaki kullanılabilir bir iş parçacığı için bu görevi sıraya benzetmektir. Oysa bir QThread'i başlatmak aslında yeni bir işletim sistemi parçacığı ayırır ve yürütür.
parçacığı havuzu QRunnable durumlarda eseri kuyruğuna sahip parçacığı sınırlı sayıda yönetecek. Bir iş parçacığı kullanılabilir hale geldiğinde, işlemek için bir QRunnable atanacaktır. QThreadPool'u QRunnable ile kullanıyorsanız, herhangi bir QThread örneğini açıkça oluşturmanız gerekmez. QRunnable durumlarda kullanıldığında yine (örneğin bir QMutex, QMutexLocker, QReadWriteLock, QSemaphore ve/veya QWaitCondition ile) paylaşılan kaynaklar senkronize kalmasını sağlaması gerektiğini unutmayın.