VC6.0 + MFCで作成しています。
スレッドを作りその中で処理を行っており、
Sleepで停止している部分があります。
このスリープが30分停止するとして
30分たつ前にSleepを解除することは可能なのでしょうか?
わかる方がいましたら教えていただけないのでしょうか?
無理かと。
イベントオブジェクトとWaitFor〜系APIを組み合わせれば可能です。
別スレッドが処理を完了するまで(最大30分)待ちたい、ってことでしょうか。
ならばSleepせずにWaitForSingleObject/WaitForMultipleObjectで完了を待てばいい。
秒速さん、επιστημηさん返信ありがとうございます。
>無理かと。
無理なのですか・・・
>別スレッドが処理を完了するまで(最大30分)待ちたい、ってことでしょうか。
説明がへたですいません。
これの逆で、30分も待ちたくないのです。
現在WaitForSingleObjectでスレッドの終了を待っています。
しかし、スレッドの中でSleepで30分待機しているものだから、終了処理に最高で30分かかってしまうのです。
これを回避するためにSleepを途中で解除できないものかと考えています。
> スレッドの中でSleepで30分待機しているものだから
何のために、Sleepしているのか明確にしたほうが良いのではないでしょうか?
SleepEx を使うと、特定のイベントが発生した時に、スリープを中断させることが出来ます。
これを使えば、特定のイベントが発生するまで、最大30分待つという様なことが可能になります。
そのスレッド中のSleepをWaitForSingleObjectで置き換えられない理由があるのでしょうか?
int i;
for( i = 0 ; i < 18000 ; i++ ){
sleep(100);
if( *なんかフラグ* ) break;
}
ってのでごまかす手もある。
背景説明が足りない気がしますが。
Sleepしているプログラムの改変が可能なら皆さんが言われているように
他の関数に置きえれば何とかなるでしょう。
そのプログラムが改変不能なら皆さんが言われている通り無理なので諦めましょう。
ツイート | ![]() |