LINUX.ORG.RU

История изменений

Исправление WatchCat, (текущая версия) :

Пример на 17-х плюсах.

#include <iostream>
#include <sstream>
#include <chrono>
#include <thread>

namespace ch = std::chrono;
namespace th = std::this_thread;

int main(int argc, char *argv[]) {
    using namespace std::chrono_literals;

    if( argc != 2 ){
        std::cerr << argv[0] << " <minutes>" << std::endl;
        return 1;
    }

    std::istringstream ins(argv[1]);
    unsigned query, minutes(0);
    if( !( ins >> query && ins.eof())){
        std::cerr << "Incorrect argument: " << argv[1] << std::endl;
        return 1;
    }
	
    std::cout << "Start! " << query << std::endl;
    auto start = ch::system_clock::now();
    while(true){
        th::sleep_for(500ms);
        auto elapsed = ch::system_clock::now();
        auto tm = ch::duration_cast<ch::minutes>(elapsed - start).count();
        if( tm != minutes ){
            std::cout << "minutes " << tm << std::endl;
            minutes = tm;
        }
        if( minutes >= query ) break;
    }
    std::cout << "Stop! " << query << std::endl;
    return 0;
}

PS Цикл в rust-варианте можно чутка поправить и сделать по аналогии с плюсовым.

Исходная версия WatchCat, :

Пример на 17-х плюсах.

#include <iostream>
#include <sstream>
#include <chrono>
#include <thread>

namespace ch = std::chrono;
namespace th = std::this_thread;

int main(int argc, char *argv[]) {
    using namespace std::chrono_literals;

    if( argc != 2 ){
        std::cerr << argv[0] << " <minutes>" << std::endl;
        return 1;
    }

    std::istringstream ins(argv[1]);
    unsigned query, minutes(0);
    if( !( ins >> query && ins.eof())){
        std::cerr << "Incorrect argument: " << argv[1] << std::endl;
        return 1;
    }
	
    std::cout << "Start! " << query << std::endl;
    auto start = ch::system_clock::now();
    while(true){
        th::sleep_for(500ms);
        auto elapsed = ch::system_clock::now();
        auto tm = ch::duration_cast<ch::minutes>(elapsed - start).count();
        if( tm != minutes ){
            std::cout << "minutes " << tm << std::endl;
            minutes = tm;
        }
        if( minutes >= query ) break;
    }
    std::cout << "Stop! " << query << std::endl;
    return 0;
}