Chciałbym mieć taką klasę:
class Example
{
private:
std::thread th;
void foo()
{
int x = 0;
while (true)
std::cout << ++x << std::endl;
}
public:
Example(int x)
{
th = std::thread(foo); // Błąd
th.detach();
}
~Example()
{
// zatrzymanie watka
}
};
- Jak zainicjować ten wątek?
- Chciałbym, żeby wątek działał tak długo jak obiekt tej klasy jest na stosie/stercie.
- Zatrzyma się sam na przykład po "delete example"?
- Powinienem zastosować RAII(jak wyłączyć wątek?)?
- Istnieje jakiś mechanizm oparty na RAII, coś w stylu "thread_guard"?
- Jeśli włączę kilka wątków, które korzystają z std::cout / std::endl to często napisy pojawiają się w jednej linii, czy to wynika z jednego bufora? Jak tego uniknąć?
- Zawsze widzę, że destruktory klas są publiczne, ale właściwie dlaczego, czy to dobra praktyka?