0

Windows7でQt5を使用しています。
QThread を使用してタスクを作成する方法は知っていますが、問題は次のとおり
です。毎日 03:00AM にタスクを実行するにはどうすればよいですか?
QTimer を考えていたのですが、どうもうまくいかないようです...どうにか午前 3:00 にリンクできません。

明確にするために、一部の Windows アプリケーションを使用できません。履歴リストのクリーンアップ、1000 行 (または何でも) へのトリミングなど、いくつかのクリーニング ジョブも実行するため、Qt アプリ内でコード化する必要があります。 ..

4

3 に答える 3

1

を使用して何が問題なのQTimerですか? タスクスケジューラがより良い選択肢であることに同意します。ここで0,03%は、コードが実行されるときだけ、実際に何かを行うことになっています。正確な瞬間がそれほど重要でない場合は、タイマー間隔とチェック境界を増やして、不要な呼び出しを減らすことができます。しかし、あなたがそのような解決策を好むなら、これはうまくいくはずです:

someclass::someclass(){

    member_timer = new QTimer(this);
    QObject::connect(member_timer, SIGNAL(timeout()), this, SLOT(check_time()));
    member_timer->start(30000);

    member_cleanup_performed = false;
}

void someclass::check_time(){

    QTimer ctime = QTime::currentTime();
    if(ctime.hour() == 3 && ctime.minute() == 0){

        if(member_cleanup_performed == false){
            this->cleanup();
            member_cleanup_performed = true;
        }
    }else{
        member_cleanup_performed = false;
    }
}
于 2015-06-26T13:45:36.043 に答える
1

Windowsタスクスケジューラを使用してこれを行うことができます

ここに画像の説明を入力

于 2015-06-26T11:57:39.087 に答える
0

C++11 を使用できる場合は、std::this_thread::sleep_untilをご覧ください。別のスレッドで実行し、スレッドがメイン スレッドのスロットに接続されたシグナルを発行するようにします。これにより、アクションが実行されます。もちろん、アプリケーションが実際に午前 3 時に実行されている必要があります。

于 2015-06-26T12:31:54.613 に答える