私は、名前付きパイプ(FIFO)を介してIPC同士でサーバーとクライアントコードを持っています。クライアントはSIGNAL(例えばSIGUSR1)をServerに送り、指定された時間分解能で到着した信号が(コマンドライン引数を介して)到着したかどうかを調べる。サーバは5ms毎に5msをチェックし、5ms後に到着した信号があるかどうかをチェックし、到達していれば何らかのコードを実行し、信号が到着するまで続く。指定された解像度で信号が到着したかどうかを確認する
ここに私の問題があるのです。私はこれらの行動のために何を使うべきかを知らない。私は "Unixシステムプログラミング:コミュニケーション、同時実行性、スレッドKay A. Robbins、Steven Robbins"を見て、私のために使うかもしれない機能をいくつか見つけました。睡眠、アラーム、睡眠、NanoSleep、一時停止。しかし、私は自分の状況でどちらを使うのか分かりません。睡眠は質問から外れています。私は秒がかかると思うし、ミリ秒に変換しようとするとオーバーフローすると思います。
少しのコードスニペットやpsudocodeがわかりやすいです。
信号が所定の解像度の周波数で到着したかどうかを確認する方法を単に尋ねます。私は信号がそれらのミリ秒で到着したかどうか確認しなければならない。信号がキャッチされている場合は、任意の「n」秒をチェックします。
これは不明である - おそらくあなたがシグナルハンドラを登録しましたが、それを超えて、私はあなたが記述しているものを言うことができません。 –
私はシグナルハンドラをはいました。私は2つのタイムサーバーと呼ばれるプログラムを持っている他のクライアントです。タイムサーバーは、シグナルがその引数に到達したかどうかを確認するために、ミリ秒単位でクリックを取得します。 "./timeserver 5"のように5ミリ秒ごとに信号をチェックします。シグナルがある場合、シグナルハンドラはもちろん実行されます。私は基本的に、与えられた "ミリ秒の引数"のブロックとアンブロックを行いたい。 – opricnik
あなたはブロックしたりアンブロックしたりしたくない。シグナルが到着した場合、シグナルハンドラにフラグを設定させたいとします。 – AlexP