Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Dynamický počet vláken s std::thread  (Přečteno 1651 krát)

Firzen

  • Stálý člen
  • **
  • Příspěvků: 1287
    • Beroot
Dynamický počet vláken s std::thread
« kdy: 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ě:
Kód: [Vybrat]
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:
Kód: [Vybrat]
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.
AMD Phenom II X6 1100T@3,3GHz, Gigabyte GeForce GT 430 1GiB, 8GiB RAM, 1TiB SATA3 HDD, Nokia N900
OS: Debian 6.0 Squeeze, Maemo 5
Citace
Prosintě ty jsi takový zkušený vývojář - co mám dělat, když nevím, jako něco udělat? :D

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re:Dynamický počet vláken s std::thread
« Odpověď #1 kdy: 19 Října 2011, 15:35:18 »
Asi bych to dělal přes ukazatele. A todle určitě vyhazuje chybu: vlakna.push_back(funkce);

Spíš takhle:

Kód: [Vybrat]
vector<thread> vlakna;
thread vl(funkce);
vlakna.push_back(vl);

Ale radši bych to asi dělal přes ukazatele než staticky.
« Poslední změna: 20 Října 2011, 13:36:06 od Martin - ViPEr*CZ* »
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

premet

  • Host
Re:Dynamický počet vláken s std::thread
« Odpověď #2 kdy: 20 Října 2011, 13:15:50 »
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ě.

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re:Dynamický počet vláken s std::thread
« Odpověď #3 kdy: 20 Října 2011, 13:40:40 »
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í :-)
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

 

Provoz zaštiťuje spolek OpenAlt.