私は画面上でランダムなポイントを得るために移動するCでゲームを作ったが、ゲームの終わりまでゲームの30秒のように遊んでいる時間を設定したい。どのようにすればいい?Cの秒数でカウントダウンする方法は?
私は機能時計を知っていますが、私はより詳細なもの、それを使用する方法、または他の何かを働かせたいです。
私は画面上でランダムなポイントを得るために移動するCでゲームを作ったが、ゲームの終わりまでゲームの30秒のように遊んでいる時間を設定したい。どのようにすればいい?Cの秒数でカウントダウンする方法は?
私は機能時計を知っていますが、私はより詳細なもの、それを使用する方法、または他の何かを働かせたいです。
#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秒間遅延させることができますが、繰り返しを行うたびにチェックし、それに応じてコードを整理する必要があります。
それは素晴らしいソリューション、ジェイジョシです。それは明確かつ移植性がある。 –
いつも歓迎、友人:D –
ループで毎回 'CLOCKS_PER_SEC 'で割るのではなく、最初に一度それを乗算してみませんか?また、 'usleep(3)'の短い呼び出しを投げて、ループ内でCPUを使いすぎないようにしてください。 –
遅延の開始時間と秒の静的変数を持つ遅延関数を使用できます。
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;
}
['alarm'](http://man7.org/linux/man-pages/man2/alarm.2.html)を使用しますか? – yano
x秒をカウントする何か。x秒から0まで。 – DanielRO
質問を編集してより具体的にすると、検索や他の人に役立つことができます。それはまた、質問のステータスを保留からアクティブに変更します。ありがとう:) –