Как автоматически запланировать поток, а затем остановить его от основного
в c++ main я хочу отправить start a thread в начале программы
этот поток должен вызывать функцию снова и снова до тех пор, пока не будет достигнут конец программы s, Что означает, что когда все остальное будет сделано, этот поток должен быть остановлен только тогда.
мне нужен этот поток, чтобы вызвать функцию рекурсивно, потому что мне нужно сделать что-то внутри этой функции через определенное время, скажем, через каждые 2 минуты я хочу, чтобы эта функция выполнялась сама собой, в то время как другие функции в main завершаются последовательно.после того, как каждая функция завершается последовательно, я хочу, чтобы поток остановился, и я не могу получить никакой логики, чтобы сделать это ниже мой код я не могу остановить поток с помощью std::terminate()
я думаю, что проблема заключается в бесконечном цикле, в котором функция вызывает себя рекурсивно
я не могу придумать никакой логики, чтобы сделать это
Что я уже пробовал:
#include<iostream> #include<chrono> #include<thread> #include<functional> //#include<unistd.h> #include<Windows.h> using namespace std; void do_something() { cout << "\ni am running after 1 minute in thread" << endl; int sleep_time = 1000; while (true) { Sleep(sleep_time); do_something(); } } void simpleFunc() { cout << "\nsimple function to check"; } int main() { cout << "\nIn main"; //thread t1(timer_start(do_something()), 1); //while (true); thread th1(do_something); simpleFunc(); cout << "\nafter the thread in main"; Sleep(6000); cout << "\nafter Sleep in main"; //th1.detach(); //th1.detach(); //th1.join(); std::terminate(); return 0; //std::terminate(); //system("pause"); //return 0; }
Richard MacCutchan
Этот поток будет работать рекурсивно вечно; чего именно вы пытаетесь достичь с помощью этого кода?
Member 12899279
я знаю но внутри этой функции есть что то что мне нужно запустить через заданный интервал времени скажем 5 минут
мне нужно, чтобы эта функция вызывала себя снова и снова через 5 минут, поэтому я выделил для нее отдельный поток, потому что я хочу, чтобы она работала отдельно от другого последовательного кода в моем основном коде()
мне нужно чтобы этот поток остановился и одновременно эта функция тоже не выполнялась как только весь другой последовательный код будет закончен выполнение в main и в main я возвращаюсь 0
Richard MacCutchan
Вам нужно убить поток из main или использовать флаг, который main устанавливает, чтобы указать, что поток должен завершиться.