【问题标题】:simultanous read and write (stdin, stdout) in CC中的同时读写(stdin,stdout)
【发布时间】:2013-05-05 15:12:42
【问题描述】:

我正在尝试编写一个聊天客户端和服务器,客户端应该能够从服务器打印消息,同时在控制台上写一些东西。

所以我创建了一个应该读取用户输入的 pthread,主线程从服务器打印消息。但是,当我输入内容并在收到消息时,我正在输入的文本会被推送到控制台上。我该如何解决?

例如: 我正在输入“abcdef”,然后当我从服务器收到消息(但还没有完成输入)时,它将如下所示:

abcdef[Chatuser1]:你好

【问题讨论】:

  • 预期的结果是什么?只在回车后显示收到的消息?
  • 打印消息后,您需要将 tty 置于原始模式并自行刷新屏幕。

标签: c stdout stdin simultaneous


【解决方案1】:

使用信号量或互斥锁等同步技术来同步多线程程序中的输入和输出

【讨论】:

    【解决方案2】:

    我真的建议在具有两个单独编辑框元素的 GUI 中而不是在控制台中执行此类操作。

    如果您仍想在控制台中执行此操作,则需要直接进行控制台缓冲区修改。

    每次有新的输出消息到达时,都必须备份当前输入消息,这样您就可以节省地写入控制台,然后进行一些自定义滚动并再次添加输入消息。需要线程同步以防止缓冲区中的输入和输出混合。

    我认为您也不会绕过自定义键处理,因为否则您将无法访问部分类型的输入。

    【讨论】:

    • 在控制台中,ncurses 可能是一个解决方案
    猜你喜欢
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多