Starting and breaking an infinite loop using two threads

I try to run a loop until the user tries to break out of it. Regardless of whether the user wants to run the function all night or just a few seconds, the cycle should be repeated until the user decides to stop it.

When researching solutions, I came across using two threads to achieve this. The first thread starts an infinite loop, while the second thread waits for user input. Having received this input, the second thread will complete the first and then return.

  • How to use the second thread to complete the first?

#include <iostream> #include <iomanip> #include <ctime> #include <thread> #include <cstdlib> #include <Windows.h> using namespace std; void timeCount() { time_t rawTime; struct tm * timeinfo; do { Sleep(500); system("cls"); time(&rawTime); cout << "Seconds passed this epoch:" << rawTime << endl << endl; timeinfo = localtime(&rawTime); cout << "The local time is:" << asctime(timeinfo) << endl; timeinfo = gmtime(&rawTime); cout << "The UTC time is :" << asctime(timeinfo) << endl; } while (1 != 0); }; void getStop() { system("pause"); }; void timeSince() { thread counter(timeCount); thread stopper(getStop); counter.detach(); stopper.join(); counter.~thread(); }; 
0
source share
1 answer

I usually use atomic<int> or atomic<bool> .


Stream function

 void run( atomic<bool> & quit ) { while (!quit) { // Do some work. } } 

Mainthread:

 int main() { // Just to show you can do this with more than 1 extra thread. unsigned int nThreads = std::thread::hardware_concurrency(); std::atomic<bool> loopFlags[nThreads]; std::thread threads[nThreads]; // Start threads for ( int i = 0; i < nThreads; i++) { loopFlags[i] = false; threads[i] = std::thread(run, std::ref(loopFlags[i])); } usleep(10000); // Sleep for a while or do something else. // Shutdown other threads for ( auto & flag : loopFlags ) { flag = true; } // Wait for threads to actually finish. for ( auto& thread : threads ) { thread.join(); } // Resume what you were doing. } 
+4
source

Source: https://habr.com/ru/post/1234853/


All Articles