![]() |
|
|
Googleのunix.com
|
|||||||
| HP - UX HP - UXの(ヒューレットパッカードのUNIX )のHewlett - PackardのUNIXオペレーティングシステムの独自の実装、システムの五に基づい |
その他のUNIXおよびLinuxフォーラムトピックは参考にすること
|
||||
| スレッド | スレッドスターター | フォーラム | 返信 | 最後の投稿 |
| 変数には、クエリの出力を追加する別のクエリで使用するには | hazno | シェルプログラミングとスクリプティング | 0 | 2009年3月24日 08:52午後 |
| のMac OS X :なぜMacをスリープしない可能性がありますや睡眠モード滞在 | アイボット | OS XサポートのRSS | 0 | 2009年3月19日 10:50午後 |
| UNIX時刻をlocaltimeの変換 | AshishK | UNIXの詳細&エキスパートのためのユーザー | 2 | 2007年10月30日 10:22午前 |
| Perlの+ localtimeの( ) | Optimus_P | シェルプログラミングとスクリプティング | 3 | 2003年7月9日 06:32午後 |
| 眠る | アンナ | UNIXのダミー質問と回答のため | 5 | 2001年7月11日 12:52午前 |
![]() |
|
|
LinkBack | スレッドツール | このスレッドを検索 |
評価:
|
表示モード |
|
|
|
||||
|
睡眠& localtimeのクエリ
やあ、
私は、アプリケーションとi HPUXクエリ睡眠& localtimeのシステムコールについてHPUXでいたに取り組む。 ここに我々はしているコードです: 定数uint32_t WAKE_INTERVAL_SEC ( 30 * 60 ) ; 一方( )に該当( / /を何時だとして下さい 時間( & currentTime ) ; / /場合は、現在9:20ウェイクアップされてクロックを30分、つまり10分後にスレッドをウェイクアップ揃え、 / /場合は9:05現在、 25分後に目を覚ます。 / /この30分で、残り数秒の計算。 sleepTime \u003d WAKE_INTERVAL_SEC - ( currentTime % WAKE_INTERVAL_SEC ) ; ( 1 ) ( ( sleepTime )睡眠; / /定期的に働くか tptr \u003d localtimeの( & currentTime ) ; もし( 12 \u003d\u003d tptr - > tm_hour & & tptr - > tm_min < WAKE_INTERVAL_MIN ) ( / / 12:00に行われる作業 ) ) 期待の動作: 上記のコードのように、私たちは30分ごとに、いくつかの作業を行うことが12日とする場合には、時間が午前12:30の間でもあるし、昼の仕事をするにも期待しています。 実際の動作: それは正常に動作時間の大半。しかし、一部の回、 12:30寝る前にして、ロジックが失敗し、昼は仕事では数秒、終了しているようだ。 12:30以降のスレッドで目が覚めたしているため、作業条件satisify正午できない私は、正午の作業条件を理想的には失敗し、期待している。 (トレースのsyslogには定期的な仕事は12:30に開始しているが、ログ自体を示していると私はしばらく時間を早期に目を覚ますことがある)睡眠を疑う 質問: -スケジュールの時間寝る前に目を覚ますことができます( SIGALRM以外) ?ここで目を覚ますことは睡眠時間をスケジュールする前に、他の条件はありますか? - localtimeの比較を返すために間違った時刻を使用することはできますか? -それは内部的に行われていますいくつかの時間を調整可能(内部クロックなど漂流)睡眠の結果は、 2回目よりも早く、現地時間のいくつかの理由で、何らかの調整を行う見通しを覚醒されることがありますか? この点に関しては任意の入力を感謝しています。 ありがとう&よろしく、 nsv |
|
||||
|
私はこの明確に伝えるようにした: あなたが正確にどのくらい睡眠を保証することはできません。汚物を追加するには、いくつかの( )を秒単位で計算を1つの方法か、別の要因ファッジは、完全にすべての時間を仕事に行くのではない-があると仮定している例は、 のPOSIX 対応時間-すなわち、うるう秒。 : コード:
calculate duration of sleep: time_t how_long_to_sleep=1800; how_long_to_sleep-= time(NULL) % 1800; sleep(!how_long_to_sleep ? 1800 : how_long_to_sleep); 復帰後の時間のテスト: コード:
time_t now=time(NULL); now=now % 1800; if( now < 2 && now > 1797) // sleep period ended close enough else // sleep period is off by too much fi あなたも)は、これもまたミリ秒の値は、最小限のものにしている細かい粒usleep (値を試す可能性がある。それとして長い。これよりも高い優先順位を1つのジョブを実行している例。 |