[解決済み] C言語で、ミリ秒に代わるスリープ関数はありますか?
質問
Windowsでコンパイルされたソースコードがあります。Red Hat Linuxで実行できるように変換しています。
このソースコードには
<windows.h>
ヘッダーファイルを使用し、プログラマーは
Sleep()
関数でミリ秒単位で待機させます。これは、Linuxでは動作しません。
しかし
sleep(seconds)
関数がありますが、これは秒単位の整数を使用します。ミリ秒を秒に変換するのは嫌です。Linuxでgccコンパイルして使える代替のsleep関数はないでしょうか?
どのように解決するのですか?
はい - 古い
POSIX
標準化された
usleep()
ということで、Linuxで利用可能です。
int usleep(useconds_t usec);
説明
usleep()関数は、呼び出したスレッドの実行を一時停止させる。 (少なくとも)usecマイクロ秒。 スリープの時間は、以下の理由により若干長くなる可能性があります。 システムの活動、呼び出しの処理に費やされた時間、あるいは システムタイマーの粒度
usleep()
取る
マイクロ秒
ということで、ミリ秒単位でスリープさせるためには、入力に1000を掛ける必要があります。
usleep()
は非推奨となり、その後 POSIX から削除されました。新しいコードについては
nanosleep()
が望ましいとされています。
#include <time.h> int nanosleep(const struct timespec *req, struct timespec *rem);
説明
nanosleep()
で指定された時間以上経過するまで、 呼び出しているスレッドの実行を一時停止する。*req
が経過するか、または のハンドラを呼び出すトリガーとなるシグナルが送られたとき。 呼び出したスレッドまたはプロセスを終了させる。timespec 構造体は、時間の間隔をナノ秒の精度で指定するために使用されます。 以下のように定義される。
struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ };
例
msleep()
を使用して実装された関数です。
nanosleep()
信号によって中断された場合、スリープを継続する。
#include <time.h>
#include <errno.h>
/* msleep(): Sleep for the requested number of milliseconds. */
int msleep(long msec)
{
struct timespec ts;
int res;
if (msec < 0)
{
errno = EINVAL;
return -1;
}
ts.tv_sec = msec / 1000;
ts.tv_nsec = (msec % 1000) * 1000000;
do {
res = nanosleep(&ts, &ts);
} while (res && errno == EINTR);
return res;
}
関連
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】シンプルなC言語のscanfが機能しない?重複
-
[解決済み] T-SQLのSleepコマンド?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] ミリ秒単位でスリープ
-
[解決済み] Python プログラムを 50 ミリ秒間スリープさせるにはどうしたらいいですか?
-
[解決済み】JavaScript版sleep()とは?)
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】組み込み関数「malloc」の暗黙の宣言の非互換性
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】エラー:'for'ループの初期宣言はC99モードでしかできない【重複
-
[解決済み】エラー。非スカラー型への変換を要求された
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み】C言語でpow( )への未定義参照、math.hを含むにもかかわらず【重複】。
-
[解決済み】c - 警告:関数 'printf'の暗黙の宣言