jeudi 21 mars 2019

C++ console application async accepting user input

I recently stumbled upon this link and I just tried it, but it's not working as I expect.

With this code:

#include <atomic>
#include <thread>
#include <iostream>

void ReadCin(std::atomic<bool>& run)
{
    std::string buffer;

    while (run.load())
    {
        std::cin >> buffer;
        if (buffer == "q")
        {
            run.store(false);
        }
    }
}

int main()
{
    std::atomic<bool> run(true);
    std::thread cinThread(ReadCin, std::ref(run));

    while (run.load())
    {
        // some lengthy operation
    }

    run.store(false);
    cinThread.join();

    return 0;
}

In the main While loop, I have an object of a class that is doing some lengthy operation, one which I'm trying to stop with the letter "q" coming from the user. When I type "q", i see the "run.store(false);" hit in the ReadCin method, but this doesn't break me off from the main while loop. What am I doing wrong?

Aucun commentaire:

Enregistrer un commentaire