回答編集履歴
4
コード修正
answer
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
int main() {
|
20
20
|
struct timespec start, current;
|
21
|
-
|
21
|
+
time_t diff = 0;
|
22
22
|
clock_gettime(CLOCK_MONOTONIC, &start);
|
23
23
|
|
24
24
|
while (diff < 10) {
|
3
誤字修正
answer
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
【追記】
|
2
2
|
`clock_gettime()`を使ったコードに変更しました。
|
3
3
|
|
4
|
-
計測を開始した時点での`clock_gettime()`の値と、現在の`clock_gettime()`の値の**差が10秒以下の間処理を繰り返す**プログラムを書けば、HIG4TOさんのやりたいことが実現できるのではないでしょうか。
|
5
|
-
|
6
|
-
|
4
|
+
`clock_gettime()`は`timespec`型の値を返し、`timespec`型は秒とナノ秒の情報が入った構造体です。
|
7
5
|
`clock_gettime(CLOCK_MONOTONIC, ×pec型の変数)`とすると単調増加の値が得られます。
|
8
6
|
計測を始めた時点の値と現在の値の**差が10秒以下の間処理を繰り返す**プログラムを書けばHIG4TOさんのやりたいことが実現できるのではないでしょうか。
|
7
|
+
|
9
8
|
今回はナノ秒のオーダーは必要ないと思われますので、単純に秒のみを比較します。
|
10
9
|
処理を繰り返すときは定期的に`sleep()`のような関数を呼び出さないとハングアップしてしまいますので注意です。
|
11
10
|
|
2
参考文献を追加
answer
CHANGED
@@ -11,6 +11,8 @@
|
|
11
11
|
|
12
12
|
HIG4TOさんの環境が不明ですのでここでは`unistd.h`の`usleep()`を使っていますが、Windowsなどの場合は代替となる関数(`windows.h`の`Sleep()`とか)をググってみてください。
|
13
13
|
|
14
|
+
[時間情報の取得 clock_gettime() - 時間の扱い - 碧色工房](https://www.mm2d.net/main/prog/c/time-05.html)
|
15
|
+
|
14
16
|
```c
|
15
17
|
#include <time.h>
|
16
18
|
#include <unistd.h>
|
1
clock_gettimeをつかったコードに変更
answer
CHANGED
@@ -1,10 +1,14 @@
|
|
1
|
+
【追記】
|
1
|
-
`
|
2
|
+
`clock_gettime()`を使ったコードに変更しました。
|
2
3
|
|
3
|
-
`time()`は「西暦 1970 年1月1日からの経過秒数」を返す関数です。
|
4
|
-
計測を開始した時点での`
|
4
|
+
計測を開始した時点での`clock_gettime()`の値と、現在の`clock_gettime()`の値の**差が10秒以下の間処理を繰り返す**プログラムを書けば、HIG4TOさんのやりたいことが実現できるのではないでしょうか。
|
5
5
|
|
6
|
-
なお、`
|
6
|
+
なお、`clock_gettime()`は`timespec`型の値を返し、`timespec`型は秒とナノ秒の情報が入った構造体です。
|
7
|
+
`clock_gettime(CLOCK_MONOTONIC, ×pec型の変数)`とすると単調増加の値が得られます。
|
8
|
+
計測を始めた時点の値と現在の値の**差が10秒以下の間処理を繰り返す**プログラムを書けばHIG4TOさんのやりたいことが実現できるのではないでしょうか。
|
9
|
+
今回はナノ秒のオーダーは必要ないと思われますので、単純に秒のみを比較します。
|
7
10
|
処理を繰り返すときは定期的に`sleep()`のような関数を呼び出さないとハングアップしてしまいますので注意です。
|
11
|
+
|
8
12
|
HIG4TOさんの環境が不明ですのでここでは`unistd.h`の`usleep()`を使っていますが、Windowsなどの場合は代替となる関数(`windows.h`の`Sleep()`とか)をググってみてください。
|
9
13
|
|
10
14
|
```c
|
@@ -12,17 +16,17 @@
|
|
12
16
|
#include <unistd.h>
|
13
17
|
|
14
18
|
int main() {
|
19
|
+
struct timespec start, current;
|
15
|
-
|
20
|
+
int diff = 0;
|
21
|
+
clock_gettime(CLOCK_MONOTONIC, &start);
|
16
22
|
|
17
|
-
diff = (time_t)0;
|
18
|
-
start = time(NULL);
|
19
|
-
|
20
23
|
while (diff < 10) {
|
21
24
|
usleep(0.5 * 1000000); // 0.5秒待つ
|
22
25
|
|
23
26
|
// その他いろいろやる
|
24
27
|
|
28
|
+
clock_gettime(CLOCK_MONOTONIC, ¤t);
|
25
|
-
diff =
|
29
|
+
diff = current.tv_sec - start.tv_sec;
|
26
30
|
}
|
27
31
|
|
28
32
|
return 0;
|