Od razu mówie że dopiero zaczynam z wątkami.
i tak che sobie zrobić taką klase które wykona metode join jeśli funkcje tworząca obiekt się skończy a wątek jeszcze nie.
i tak problem jest taki że to nie działa. Kiedy próbuje przekazać wątek do klasy, tak żeby zmienna w tej klasie była jedynym posiadaczem własności
to potem wszędzie mam podkreślone t1, jak prubuje wywołać jakąś metodę w tym wypadku a, tak jak by to niebyła obiekt klasy.
a przydały by się metody które zwrucą np ID wątku. ca ja tu robie źle ??
#ifndef __header_h
#define __header_h
#include <iostream>
#include <string>
#include <thread>
class test
{
private:
int& m_i;
public:
test(int& i) : m_i(i) {}
void operator()();
};
class test2
{
public:
void operator()();
};
class thread_guard
{
private:
std::thread m_t;
public:
thread_guard(){};
thread_guard(std::thread t) : m_t(std::move(t)) {}
~thread_guard() { m_t.join(); }
void a(void) { std::cout << "aaaaaa" << std::endl; }
};
#endif
#include <iostream>
#include <algorithm>
#include <memory>
#include <thread>
#include "Header.h"
void fun1(int & x)
{
std::cout << "Zmienna x ktora jest referencja do i: " << x << std::endl;
while (x < 100)
x++;
std::cout << "Zmienna x ktora jest referencja do i: " << x << std::endl;
}
int main(void)
{
int i = 0;
int j = 0;
std::unique_ptr<test2> u_ptr(new test2);
//test ob1(j);
test2 ob2;
thread_guard t1(std::thread(test(j)));
std::thread t2(fun1, std::ref(i));
//std::thread t3(u_ptr);
//t1.a();
std::cout << "Zmienna i: " << i << std::endl;
std::cout << "Zmianna j: " << j << std::endl;
//std::cout << "ID watku t1: " << t1.get_thread() << std::endl;
std::cout << "ID watku t2: " << t2.get_id() << std::endl;
std::cout << "ID Obecnego watku: " << std::this_thread::get_id() << std::endl;
std::thread t3 = std::move(t2);
//std::cout << "ID watku t1: " << t1.get_thread().get_id() << std::endl;
std::cout << "ID watku t2: " << t2.get_id() << std::endl;
t2.join();
}