Поток в фоновом режиме на с++
У меня есть класс счётчик, функция work должна запускать его роботу(значение каждую секунду меняется от мин до макс, когда доходит до макс, то сбрасывается в мин), а функция check_current показывает текущее значение когда захочет пользователь. Мне нужно, чтобы одновременно работали обе функции или work работала так скажем в фоновом режиме. То есть должна запустится work(начинается смена значений) и выводится сообщение "Enter to check current status, to end the checking: ", затем когда пользователь введёт check на экран должно вывестись текущее значение счётчика(напоминаю оно меняется ежесекундно), надеюсь вы поняли. Я это уже реализовывал на пайтоне с помощью библиотеки threading, знаю, что в с++ аналогом является thread, вот код на с++.
#include <iostream>
#include <Windows.h>
#include <thread>
using namespace std;
class Counter {
private:
int min;
int max;
int cur;
public:
Counter() { min = max = cur = 0; }
Counter(int a, int b, int c) { min = a; max = b; cur = c; }
~Counter() {}
int get_cur() { return cur; }
void set_min() { cout << "Enter min value - "; cin >> min; }
void set_max() { cout << "Enter max value - "; cin >> max; }
void print_min_max(void);
void work(void) {
cout << "Counter status:" << endl;
for (cur = min; cur <= max; cur++) {
Sleep(1000);
cout << '\n' << cur;
}
cur = min;
cout << "\nCounter reset to min value" << endl;
}
string request;
void check_current(void) {
while (1) {
cout << "Enter <check> to check current status, <break> to end the checking: ";
cin >> request;
if (request == "check") cout << "Current status: " << cur << endl;
if (request == "break") break;
}
}
};
void Counter::print_min_max(void){
cout << "Min = " << min << " Max = " << max << endl;
}
int main(){
Counter obj1(0, 0, 0);
obj1.set_min();
obj1.set_max();
obj1.print_min_max();
thread th(Counter::work);
th.detach();
obj1.check_current();
return 0;
}
и вот на пайтоне
from time import sleep
from time import time
import threading
class Counter():
def __init__(self, name):
self.name = name
print("Class created")
def set_min(self):
self.min = int(input("Enter min value - "))
def set_max(self):
self.max = int(input("Enter max value - "))
def print_min_max(self):
print("Min =", self.min, "Max =", self.max)
def work(self):
for self.current in range(self.min, self.max + 1):
sleep(1 - time() % 1)
self.current = self.min
print("\nCounter reset to min value")
def check_current(self):
while 1:
request = str(input("Enter <check> to check current status, <break> to end the checking: "))
if request == "check":
print("Current status:", self.current)
if request == "break":
break
def __del__(self):
print("Class deleted " + self.__str__())
Clock = Counter("Clock")
Clock.set_min()
Clock.set_max()
Clock.print_min_max()
t = threading.Thread(target = Clock.work)
t.daemon = True
t.start()
Clock.check_current()