关于C++的多线程
  • 板块灌水区
  • 楼主qwq自动机
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/8/15 11:12
  • 上次更新2023/11/4 10:37:10
查看原帖
关于C++的多线程
134519
qwq自动机楼主2021/8/15 11:12

RT,假如我有如下的一段代码:

std::queue<int> q;
volatile bool isRunning = false;
void input()
{
    while (isRunning)
    {
        int n;
        std::cin >> n;
        q.push(n);
    }
}
int main()
{
    isRunning = true;
    std::thread thrInput(input);
    while (isRunning)
    {
        if (!q.empty())
        {
            int cur = q.front();
            q.pop();
            std::cout << "Number = " << cur << std::endl;
            if (q == -1)
            {
                std::cout << "Preparing to quit..." << std::endl;
                isRunning = false;
                break;
            }
        }
    }
    if (thrInput.joinable())
        thrInput.join();
    return 0;
}

我想在我输入 -1 的时候结束程序。但是当我输入 -1 之后子线程(就是那个 thrInput)卡在输入那里,导致主程序中循环停止后一直无法 join,只能再输入一个什么东西才行……目前的解决方案是在输入处也判断一下若是 -1 则退出。

想问下是否有另外的一种更“好”的解决方案(就是输入管输入,处理管处理之类的)?昨天已经调了一晚上了/tuu

2021/8/15 11:12
加载中...