2013-08-14 13 views
5

Oluşturulduktan sonra C++ 11 iş parçacığı başlatılana kadar nasıl beklenir? İş parçacığının çalışıp çalışmadığını kontrol etmek için özel bir yöntem sunan diğer iş parçacıklı kitaplıkların (Qt gibi) aksine, bunun için herhangi bir yönteme sahip görünmüyor.Gerçekte başlatmak için C++ 11 iş parçacığı bekleniyor

+3

Bunun için kullanım durumunuz nedir? – Casey

+0

Evet, lütfen kullanım durumunu açıklayın. C++ 11 iş parçacığı oluşturulduktan hemen sonra "başlatıldı". Konu API'sini "canlı/devam eden" ve "sonlandırılan/biten" kavramının bazılarıyla genişletmek ister misiniz? İş parçacığı etkinliğini başka biriyle senkronize etmek istiyor musunuz? Açıkça başlayana kadar yeni iş parçacıklarının "duraklatılmış" olmasını ister misiniz? Etc. – pilcrow

+2

"Gerçekte başlangıç" ne anlama geliyor? – Casey

cevap

11

Dil tanımı, yeni iş parçacığının yapıcı dönmeden önce başlamasını gerektirir. Formal olarak, bu [thread.thread.constr]/5: "Kurucunun çağrısının tamamlanması, f kopyasının başlatılmasının başlangıcıyla eşitler."

5

Neden ilk etapta başlamasını beklemeniz gerektiğinden emin değilim, ancak eğer yaparsanız, bir muteks, bir koşul ve başlatılıp başlatılmadığını belirten bir işaret kullanmanız gerekir. Yeni oluşturulmuş bir iş parçacığında, muteks'i kilitleyin, bayrağı «true» olarak ayarlayın ve koşullu değişken üzerindeki garsona (leri) bildirin. Bir iş parçacığı oluşturan kodda, muteks kilitleyin ve bayrağı denetleyin. Eğer bayrak «doğru» ise - ipiniz başlatılır, eğer «yanlış» ise, koşullu bir değişkende bekleyin ve bir kez uyandığında tekrarlayın.

+0

Teşekkürler. Umduğum daha iyi bir çözüm olduğunu umuyorum, ama sanırım değil. –

+0

Veya Win32'de bir olay gibi bir waitable nesnesi kullanın, sonra mutex veya flag'e ihtiyacınız yoktur, sadece koşul olarak davranan olay. Veya tek başına bir bool bayrağı kullanın ve bayrak ayarlanıncaya kadar oluşturma iş parçacığı döngüsüne sahip olun. Kilitlemene gerek yok. –

+0

@pilcrow: ve değilse? –

İlgili konular