从控制台线程读取或获取命令

Reading or getting a command from console thread

本文关键字:获取 命令 读取 控制台 线程      更新时间:2023-10-16

我有一个c++程序,里面有几个线程。我希望其中一个线程能够从控制台读取/获取命令,而其他线程继续运行,例如:"播放","停止","暂停",…

类似:

while (1)
{
    std::string str;
    getline(std::cin, str);
    /* do something */
}

它会工作吗?有什么建议吗?

简短回答:是的。

长篇大论:这取决于你如何称呼"工作",当其他线程正在运行时,没有什么可以阻止你从一个线程调用阻塞函数/方法。

然而,线程共享内存和资源。在UNIX机器上(在Windows上也差不多),标准输入和标准输出在线程之间是共享的。在某些情况下,std::cin将在底层操作stdin,您应该确保一次只有一个线程可以操作给定的资源

您可以通过使用std::cin来确保只有一个线程可以访问代码,或者使用互斥锁/信号量来使用同步。