【问题标题】:Reading or getting a command from console thread从控制台线程读取或获取命令
【发布时间】:2014-10-05 20:31:11
【问题描述】:

我有一个 C++ 程序,里面有几个线程。我希望其中一个线程能够在其他线程继续运行时从控制台读取/获取命令,例如:“play”、“stop”、“pause”、...

类似:

while (1)
{

    std::string str;
    getline(std::cin, str);

    /* do something */

}

它会起作用吗?有什么建议吗?

提前致谢。

【问题讨论】:

  • 只要他们不同时使用 std::cin :)
  • 这可能太宽泛而无法正确解决
  • 既然你已经有了带线程的程序,你为什么不试试呢?要么这样,要么问一个比“它会起作用吗?”更明智的问题。你不确定的到底是什么?

标签: c++ string multithreading command getline


【解决方案1】:

简短回答:是的。

长答案:这取决于您所说的“工作”,没有什么可以阻止您在其他线程运行时从线程调用阻塞函数/方法。

但是,线程共享内存和资源。在 UNIX 机器上(在 Windows 上或多或少相同),stdin 和 stdout 在线程之间共享。 std::cin 将在某些时候在后台操作标准输入,您应该确保一次只有一个线程可以操作给定资源。

您可以通过确保只有一个线程可以使用 std::cin 访问代码或使用带互斥体/信号量的同步来做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2012-03-19
    • 2010-12-28
    相关资源
    最近更新 更多