1

这将只显示调用函数那一刻的静态时间......你如何显示运行时间?即:当时间从 12:00 变为 12:01 时,它会自动显示在屏幕上我基本上想在我的 cmd 屏幕顶部输出一个运行时钟并在其下方显示其他选项等

//http://stackoverflow.com/questions/997946/c-get-current-time-and-date
// Get current date/time, format is YYYY-MM-DD.HH:mm:ss
const string currentDateTime() {
    time_t     now = time(0);
    struct tm  tstruct;
    char       buf[80];
    tstruct = *localtime(&now);
    // Visit http://www.cplusplus.com/reference/clibrary/ctime/strftime/
    // for more information about date/time format
    strftime(buf, sizeof(buf), "%Y-%m-%d.%X", &tstruct);

    return buf;
}
4

2 回答 2

1

深呼吸,因为这并不容易。

您必须从根本上设计您的应用程序以多路复用几个不同的同时“事件”,例如键盘活动和计时器。

您还必须使用不同于从标准输入读取和写入标准输出的输入/输出方法。您将需要适当的终端或图形界面。

现在,一旦您了解了这两个想法,您就需要设计您的应用程序。基本成分是事件循环。这是一个无限循环,基本上每次至少有一个事件可用时执行一轮。根据事件,您可以采取措施:如果计时器触发,则更新时间显示。如果键盘触发,则处理输入。

无论您的程序执行什么逻辑,都必须在某个地方适应。例如,如果用户输入拼写出您识别的命令,您可能会启动一些操作作为响应。或者,您可能会在定时器每触发 1000 次时周期性地发生一些动作。一个函数的结果可能会触发一个事件,该事件本身可能会被事件循环捕获。只要您的程序逻辑执行得足够快以允许及时处理计时器,这将是完全可以接受的。只有当您的程序有太多工作时,您才能开始考虑让多个线程同时运行事件循环(但这要困难得多)。

在 Linux 上,这种设计的标准实现是 epoll,用于多路复用和文件文件描述符、timerfds、eventfds 和 signalfds,以及终端控制 ncurses。其他平台也有相应的技术。

于 2012-10-19T02:10:07.730 回答
0

首先,您应该查看 Windows控制台功能

更具体地说SetCursorPos,和WriteConsole

于 2012-10-19T02:05:37.800 回答