Sleepを途中で解除するには?


さく  2006-06-19 23:14:20  No: 62231

VC6.0 + MFCで作成しています。

  スレッドを作りその中で処理を行っており、
  Sleepで停止している部分があります。

  このスリープが30分停止するとして
  30分たつ前にSleepを解除することは可能なのでしょうか?
  わかる方がいましたら教えていただけないのでしょうか?


秒速  2006-06-19 23:38:20  No: 62232

無理かと。
イベントオブジェクトとWaitFor〜系APIを組み合わせれば可能です。


επιστημη  2006-06-19 23:51:11  No: 62233

別スレッドが処理を完了するまで(最大30分)待ちたい、ってことでしょうか。
ならばSleepせずにWaitForSingleObject/WaitForMultipleObjectで完了を待てばいい。


さく  2006-06-20 00:16:14  No: 62234

秒速さん、επιστημηさん返信ありがとうございます。

>無理かと。
無理なのですか・・・

>別スレッドが処理を完了するまで(最大30分)待ちたい、ってことでしょうか。
説明がへたですいません。
これの逆で、30分も待ちたくないのです。
現在WaitForSingleObjectでスレッドの終了を待っています。
しかし、スレッドの中でSleepで30分待機しているものだから、終了処理に最高で30分かかってしまうのです。
これを回避するためにSleepを途中で解除できないものかと考えています。


Blue  2006-06-20 00:20:02  No: 62235

> スレッドの中でSleepで30分待機しているものだから
何のために、Sleepしているのか明確にしたほうが良いのではないでしょうか?


シャノン  2006-06-20 04:24:20  No: 62236

SleepEx を使うと、特定のイベントが発生した時に、スリープを中断させることが出来ます。
これを使えば、特定のイベントが発生するまで、最大30分待つという様なことが可能になります。


REE  2006-06-21 02:22:53  No: 62237

そのスレッド中のSleepをWaitForSingleObjectで置き換えられない理由があるのでしょうか?


Ryo  2006-06-21 06:13:30  No: 62238

int i;
for( i = 0 ; i < 18000 ; i++ ){
  sleep(100);
  if( *なんかフラグ* ) break;
}

ってのでごまかす手もある。


PATIO  2006-06-21 23:34:04  No: 62239

背景説明が足りない気がしますが。
Sleepしているプログラムの改変が可能なら皆さんが言われているように
他の関数に置きえれば何とかなるでしょう。
そのプログラムが改変不能なら皆さんが言われている通り無理なので諦めましょう。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加