2017-11-12 2 views
-1

私は画面上でランダムなポイントを得るために移動するCでゲームを作ったが、ゲームの終わりまでゲームの30秒のように遊んでいる時間を設定したい。どのようにすればいい?Cの秒数でカウントダウンする方法は?

私は機能時計を知っていますが、私はより詳細なもの、それを使用する方法、または他の何かを働かせたいです。

+0

['alarm'](http://man7.org/linux/man-pages/man2/alarm.2.html)を使用しますか? – yano

+0

x秒をカウントする何か。x秒から0まで。 – DanielRO

+0

質問を編集してより具体的にすると、検索や他の人に役立つことができます。それはまた、質問のステータスを保留からアクティブに変更します。ありがとう:) –

答えて

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

int main() 
    { 
    clock_t begin; 
    double time_spent; 
    unsigned int i; 

    /* Mark beginning time */ 
    begin = clock(); 
    for (i=0;1;i++) 
     { 
     //printf("hello\n"); 
     /* Get CPU time since loop started */ 
     time_spent = (double)(clock() - begin)/CLOCKS_PER_SEC; 
     if (time_spent>=30.0) 
      break; 
     } 
    return(0); 
    } 

これは、実行が開始されてから30秒が経過したかどうかを確認するソリューションです。コードを30秒間遅延させることができますが、繰り返しを行うたびにチェックし、それに応じてコードを整理する必要があります。

+0

それは素晴らしいソリューション、ジェイジョシです。それは明確かつ移植性がある。 –

+0

いつも歓迎、友人:D –

+0

ループで毎回 'CLOCKS_PER_SEC 'で割るのではなく、最初に一度それを乗算してみませんか?また、 'usleep(3)'の短い呼び出しを投げて、ループ内でCPUを使いすぎないようにしてください。 –

0

遅延の開始時間と秒の静的変数を持つ遅延関数を使用できます。
0より大きい値を指定すると、遅延時間が設定されます。
遅延時間が経過した場合は、-1を指定して呼び出します。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
#include <time.h> 

#define BILLION 1E9 

int delay (double seconds) 
{ 
    static double usec = 0.0; 
    double elapsed = 0.0; 
    static struct timespec start; 
    struct timespec stop; 

    if (0.0 <= seconds) { 
     usec = seconds; 
     clock_gettime (CLOCK_REALTIME, &start); 
     return 0; 
    } 
    clock_gettime (CLOCK_REALTIME, &stop); 
    elapsed = difftime (stop.tv_sec, start.tv_sec); 
    elapsed += (stop.tv_nsec - start.tv_nsec)/BILLION; 
    if ((elapsed < usec)) { 
     return 1; 
    } 
    return 0; 
} 

int main() { 

    delay(5.1);//call to set time 
    while (1) { 

     //do stuff here 

     if (!delay(-1)) {//call to check elapsed time 
      break; 
     } 
     usleep (10000); 
    } 

    printf ("%s\n", "done\n"); 

    return 0; 
} 
関連する問題