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

これは簡単なことではないので、深呼吸してください。

キーボード アクティビティやタイマーなど、いくつかの別個の同時「イベント」を多重化するには、アプリケーションを根本的に設計する必要があります。

また、標準入力からの読み取りと標準出力への書き込みとは異なる入出力方法を使用する必要があります。適切なターミナルまたはグラフィカル インターフェイスが必要です。

これら 2 つのアイデアを理解したら、アプリケーションを設計する必要があります。基本的な要素はイベント ループです。これは、少なくとも 1 つのイベントが利用可能になるたびに、基本的に 1 ラウンドを実行する無限ループです。イベントに応じて、アクションを実行できます。タイマーが起動したら、時間表示を更新します。キーボードが起動したら、入力を処理します。

プログラムが実行するロジックが何であれ、どこかに収まらなければなりません。たとえば、ユーザー入力が認識できるコマンドを綴っている場合、それに応じて何らかのアクションを開始できます。または、タイマーが 1000 回起動するたびに、何らかのアクションが定期的に発生するようにすることもできます。1 つの関数の結果によってイベントがトリガーされる場合があり、そのイベント自体がイベント ループによってキャッチされる場合があります。プログラム ロジックが十分に速く実行され、タイマーがタイムリーに処理される限り、これは完全に許容されます。プログラムの作業が多すぎる場合にのみ、複数のスレッドでイベント ループを同時に実行することを検討できます (ただし、それは非常に困難です)。

Linux では、この設計の標準実装は、多重化およびファイル ファイル記述子、timerfds、eventfds、signalfds、および端末制御 ncurses の epoll です。他のプラットフォームには、対応するテクノロジーがあります。

于 2012-10-19T02:10:07.730 に答える
0

まず、Windowsコンソール機能を調べる必要があります。

より具体的にはSetCursorPosWriteConsole.

于 2012-10-19T02:05:37.800 に答える