Üye işlevi ile iş parçacığı başlatmak
Herhangi bir argüman ve döndürür void
alır std::thread
Bir üye ile bir işlev oluşturmak için çalışıyorum. Çalışan herhangi bir sözdizimi - ne olursa olsun şikayet derleyici çözemiyorum. test()
yürütür std::thread
döndürür spawn()
uygulamak için doğru yolu nedir?
#include <thread>
class blub {
void test() {
}
public:
std::thread spawn() {
return { test };
}
};
CEVAP
#include <thread>
#include <iostream>
class bar {
public:
void foo() {
std::cout << "hello from member function" << std::endl;
}
};
int main()
{
std::thread t(&bar::foo, bar());
t.join();
}
EDİT: Senin düzen muhasebe, böyle yapmak zorundasın:
std::thread spawn() {
return std::thread(&blub::test, this);
}
GÜNCELLEME:Bazı noktaları açıklamak istiyorum, bazıları da yorum tartışıldı.
Sözdizimi yukarıda açıklanan ÇAĞIRMAK tanımı (§20.8.2.1): bölgesidir
Aşağıdaki gibi ÇAĞIRMAK (t1, t2,..., tN f) tanımlayın
- (t1.*f) f Bir üye işlev işaretçisi(t2, ..., tN) bir sınıfın T ve t1 T türü bir nesne ya da bir nesneye bir referanstır bir tür T türetilmiş bir nesneye T türü veya bir başvuru;
- ((*t1).*f) f Bir üye işlev işaretçisi(t2, ..., tN) bir sınıfın T ve t1 türleri önceki tarif değil öğe;
- t1.*N == 1 ve f sınıfı T ve t 1 veri üyesi için bir işaretçi olduğunda f Tipi T veya bir nesnedir
türünde bir nesne başvurusu veya bir nesne için bir başvuru
yazın T türetilmiştir;- (*t1).*f N == 1 ve f sınıfı bir T veri üyesi için bir işaretçi ve t 1 türleri önceki öğe ile tarif değil;
- tüm diğer durumlarda f(t1, t2, ..., tN).
İşaret etmek istediğim başka bir genel aslında varsayılan iş parçacığı yapıcı tüm eleştirileri geçti kopyalayın. Bunun nedeni, bağımsız iş parçasıyla daha uzun yaşamak için, bağımsız garanti kopyalama gerekebilir. Eğer gerçekten bir referans geçirmek istiyorsanız, bunun yerine, std::reference_wrapper
std::ref
tarafından oluşturulan kullanabilirsiniz.
std::thread (foo, std::ref(arg1));
Bunu yaparak, argümanları hala bu konu onları çalıştığında var garantileyecek bir bakacaksın umut verici.
Her şeyi yukarıda da std::async
std::bind
uygulanabilir unutmayın.
Bunun bir işareti ile PHP bir işlevi b...
Zaman uyumsuz (:: başlatmak zaman uyum...
iOS arka Plan iş Parçacığı başlatmak...
Nasıl belge hazır açısal denetleyicisi...
Döngüsü başlatmak döngüsü düğüm bulma ...