Поток в фоновом режиме на с++

У меня есть класс счётчик, функция 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()

Ответы (0 шт):