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


さく  2006-06-19 14:14:20  No: 62231  IP: 192.*.*.*

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

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

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

編集 削除
秒速  2006-06-19 14:38:20  No: 62232  IP: 192.*.*.*

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

編集 削除
επιστημη  2006-06-19 14:51:11  No: 62233  IP: 192.*.*.*

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

編集 削除
さく  2006-06-19 15:16:14  No: 62234  IP: 192.*.*.*

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

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

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

編集 削除
Blue  2006-06-19 15:20:02  No: 62235  IP: 192.*.*.*

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

編集 削除
シャノン  2006-06-19 19:24:20  No: 62236  IP: 192.*.*.*

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

編集 削除
REE  2006-06-20 17:22:53  No: 62237  IP: 192.*.*.*

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

編集 削除
Ryo  2006-06-20 21:13:30  No: 62238  IP: 192.*.*.*

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

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

編集 削除
PATIO  2006-06-21 14:34:04  No: 62239  IP: 192.*.*.*

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

編集 削除