Я хочу создать программу, где есть несколько потоков, единственное взаимодействие между потоками должно быть несколькими переменными, созданными только для передача между потоками. Одна из них будет очередью. Я хочу, чтобы один поток постоянно записывался в файл, и я хочу, чтобы другие потоки продолжали давать строки для записи.Создание потока внутри класса и его выполнение в funtion в классе в C++ (cpp)
Но для простоты я хочу, чтобы все это происходило от создания класса, а затем просто вызывало функцию, называемую give_line() из этого класса. Я хочу, чтобы этот поток записывал в файл, чтобы другие люди не могли возиться с ним.
class bar
{
private:
std::queue<std::string> lines; // The queue
void write() // The function we call from thread
{
std::cout << "Hello world from other thread";
}
public:
bar() // constructor
{
std::thread writer(&bar::write, this); // thread
}
}
int main()
{
bar testing;
std::cout << "Hello World from main thread" << std::endl;
/*
What this does is it allows me to keep the console open till we get a enter key.
*/
std::cin.clear();
std::cin.ignore(32767, '\n');
std::cin.get();
return 0;
}
.
output:
Hello world from other thread
Почему это не имеет смысла и почему это не срабатывает. Он запускается, после чего он падает. Я не могу понять это. Он работает, когда у меня его нет в классе, но потом кто-то может испортить поток, и я действительно этого не хочу. Я не собираюсь выдавать слишком много кода из проекта, если мне это не нужно. Причина, по которой я создаю этот класс, а также другие функции и переменные - это то, что вам не нужно знать.
Я понимаю, что мне нужен writer.join() где-то. Но это на потом. Я хочу, чтобы другая переменная смогла закончить все сразу. Эта переменная может быть доступна только из основного потока, поэтому другие потоки не могут справиться с ней. вроде как переменная kill_all.
@DrewDormann: Ах да, вы правы. Это действительно убивает вашу программу. –