【发布时间】:2021-09-24 16:59:15
【问题描述】:
我想启动一个控制台程序(qt、c++)并询问用户是要加载以前的设置还是设置新的设置。 10秒无输入后,我想自动加载设置。
我的做法:
- 使用 qTimer 和附加线程启动程序
- 通过 std::cin 向用户询问他在附加线程中的输入
- 如果没有输入则触发计时器以退出线程并继续主程序
我面临的问题是,我无法以编程方式中止 std::cin。即使退出线程也不会中止 std::cin。
所以我想我的方法不对,实现我的总体目标的最佳方法是什么?
【问题讨论】:
-
cin用于简单的输入,在 C++ 目标和 C++ 几乎所有目标的每个系统上都可以正常工作。要在控制台读取超时,您通常必须使用特定于操作系统的功能。在 POSIX 系统上,我会从read和select开始(主要是因为我遇到的超时问题要少得多select比read)。在 Windows 下... 不得不说我从来没有在 Windows 中这样做过。但是杀死线程来结束任务是你几乎不应该做的事情。它会使程序处于不稳定状态。 -
也就是说,我现在才意识到问题中提到了 qt。去挖掘 qt API。很有可能 qt 内置了一些东西可以为你做这件事,或者足够接近你可以包裹它或用锤子敲打它,直到你得到你想要的东西。