1

C のアルゴリズムにランタイム制限 (時間単位) を設定して、制限に達するとアルゴリズムが停止するようにします (たとえば、12 時間)。これを行う方法について何か提案はありますか?

4

2 に答える 2

1

を使用time()して、アルゴリズムの開始時の時間と各反復の時間を取得できます。difftime()差を計算し、それが特定の値を超えたときにアルゴリズムを終了するために使用できます。

アルゴリズムが反復的であると仮定すると、5 秒後にループを終了するサンプル コードを次に示します。

#include <stdio.h>
#include <time.h>

int main(int argc, char **argv)
{
    time_t start_time;
    time_t now_time;

    time(&start_time);
    while (1) {
        /* Your algorithm goes here */

        /* Time check code */
        time(&now_time);

        if (difftime(now_time, start_time) >= 5) {
            break;
        }
    }

    return 0;
}

これは、アルゴリズムの実行中にタイム チェック コードが頻繁に呼び出されることがわかっている多くの場合に有効な、非常に単純なソリューションです。アルゴリズムの実行中に頻繁に呼び出されるようにタイム チェック コードを配置できる適切な場所を見つけることができない場合、別の方法として、アルゴリズムをスレッドで実行し、制限を超えたときにそれを強制終了することができます。

#include <stdio.h>
#include <time.h>
#include <pthread.h>

void *algo(void *arg)
{
    while (1) {
        printf("I AM THE ALGO!!\n");
    }

    return NULL;
}

int main(int argc, char **argv)
{
    time_t start_time;
    time_t now_time;

    pthread_t algo_thread;

    int ret = pthread_create(&algo_thread, NULL, algo, NULL);
    time(&start_time);

    /* Time check loop */
    while (1) {
        time(&now_time);

        if (difftime(now_time, start_time) >= 5) {
            break;
        }
    }

    return 0;
}
于 2012-01-27T15:40:56.783 に答える