Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Firzen 19 Října 2011, 13:17:57
-
Ahoj,
nemáte někdo zkušenosti s vytvářením vláken pomocí headeru thread? Umím vytvořit naprosto primitivní vlákno/a v podobě:
void funkce();
int main()
{
thread vl(funkce);
vl.join();
return 0;
}
void funkce()
{
cout << ".";
}
Tohle funguje normálně, ale to vl tam není vůbec ideální. Potřeboval bych vytvořit třeba 6 vláken, ve kterých bude běžet funkce() a to aniž bych je psal ručně, převdstavuju si něco jako:
vector<thread> vlakna;
for(int i=0; i<6; i++)
{
vlakna.push_back(funkce);
vlakna[i].join();
}
Ale toto prostě nelze zkompilovat (ani bez cyklu). Přitom toto by mělo být možné, a s každou jinou třídou kromě thread mi šlo použít vector (předpokládám, že to je šablona).
Proč tohle není možné?
A je možnost, jak udělat to co chci nějak jinak?
Díky moc.
-
Asi bych to dělal přes ukazatele. A todle určitě vyhazuje chybu: vlakna.push_back(funkce);
Spíš takhle:
vector<thread> vlakna;
thread vl(funkce);
vlakna.push_back(vl);
Ale radši bych to asi dělal přes ukazatele než staticky.
-
Tak jasný, že ti to háže chybu, když máš vector definovanej pro thread a chceš do něj házet ukazatele na funkci. Tohle budeš muset udělat jedině ručně.
-
Díky za doplnění... myslel jsem, že z toho co jsem psal to vyplynulo. Ostatně ten příklad hned pod tím by měl fungovat. Do vectoru posílám už instanci třídy vector, i když bych tam raději viděl ukazetel, se kterým je samozřejmě více problémů, které se do budoucna vyplatí :-)