■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#26581-0APIのSleep関数はな2000-07-26(水) 15:56
     #26604-0RE#26581:APIのSleep関数 改め APIのWaitForSingleobject関数はな2000-07-26(水) 18:34
     #26607-0RE#26604:APIのSleep関数 改め APIのWaitForSingleobject関数匿名266072000-07-26(水) 18:55
     #26617-0RE#26607:APIのSleep関数 改め APIのWaitForSingleobject関数ゆう(U)2000-07-26(水) 20:18
     #26635-0RE#26617:APIのWaitForSingleobject関数はな2000-07-27(木) 09:09
     #26640-0RE#26635:APIのWaitForSingleobject関数ゆう(U)2000-07-27(木) 09:43
     #26673-0RE#26640:APIのWaitForSingleobject関数はな2000-07-27(木) 14:17
     #26685-0RE#26673:APIのWaitForSingleobject関数ゆう(U)2000-07-27(木) 15:27
     #26689-0RE#26685:APIのWaitForSingleobject関数はな2000-07-27(木) 15:55
     #26691-0RE#26689:APIのWaitForSingleobject関数ゆう(U)2000-07-27(木) 16:17
#26581-0
APIのSleep関数
はな、です。
たびたび、たびたびすみません。

shell関数でexeを起動した後、sleep関数を使って10秒待ってもらう、
っていうのを作成したのですが、
10秒まってもらえないのです。
shell "edit.exe",vbnormalfocus
sleep(10000&)
としてみたのですが。。。
これって、shellのほうも10秒まってしまうんでしょうか。
#26604-0
RE#26581:APIのSleep関数 改め APIのWaitForSingleobject関数
はな、です。

shell関数では都合が悪くなってしまいました。。
ので、「こんなことできます!」の終了を待つというのに乗り換えることにしました。

WaitForSingleObject関数でタイムアウト時間を設定しますが、

    Do
        lngResult = WaitForSingleObject(lngHandle, 5000&)
    Loop While lngResult = WAIT_TIMEOUT

で、ループから戻ってこないのです。
戻ってきても、WAIT_TIMEOUT = 258になるまでがとても時間がかかります。
どなたか、同じ現象が起こった方はいらっしゃるでしょうか。
#26607-0
RE#26604:APIのSleep関数 改め APIのWaitForSingleobject関数
>     Do
     >         lngResult = WaitForSingleObject(lngHandle, 5000&)
     >     Loop While lngResult = WAIT_TIMEOUT

     WaitForSingleObjectは、タイムアウトorプロセス終了or異常終了するまで
     関数から戻ってきません。DoLoopの必要がないのでは。
     上の例だと、タイムアウト以外の場合、永遠にLoopを抜けられません。

     http://www.galliver.co.jp/vbtips/index.html
     No155が参考になります。

     私は、GetExitCodeProcessでの待機派です。
#26617-0
RE#26607:APIのSleep関数 改め APIのWaitForSingleobject関数
> >     Do
> >         lngResult = WaitForSingleObject(lngHandle, 5000&)
> >     Loop While lngResult = WAIT_TIMEOUT
> 
> WaitForSingleObjectは、タイムアウトorプロセス終了or異常終了するまで
> 関数から戻ってきません。DoLoopの必要がないのでは。
> 上の例だと、タイムアウト以外の場合、永遠にLoopを抜けられません。

この場合、タイムアウトの時は Do〜Loop を抜けません。

> 戻ってきても、WAIT_TIMEOUT = 258になるまでがとても時間がかかります。
「とても・・・」ってどのくらい?

試していないのですが・・・
lngResult = WaitForSingleObject(lngHandle, 5000&)
5000&ミリ秒ですから、何らかの終了をしなければ
5秒間は戻らないのでは・・・
※第二引数には、タイムアウトを起こさずに何らかの
 終了でのみ結果を戻す値もあります、調べてみて下さい。


●お礼だけの場合は、「ひとこと掲示板」か「一般掲示板」
 へ投稿するのがきまりです。
 ※守らない人が多いですが・・・

 内容の変更が無いなら、タイトル部分は一切変更せずに
 返信する方が良いです。

 #26549 の様な場合は、最後の返信へ「返信」として
 内容で他の返信に対するお礼・引用等を書いておくだけで
 OKだと思います。

 内容が変更になる場合、新規投稿で新たなタイトルを
 書き、元(関連)記事の情報は内容に書いたほうが
 良いと思います。
#26635-0
RE#26617:APIのWaitForSingleobject関数
おはようございます。

> > >     Do
> > >         lngResult = WaitForSingleObject(lngHandle, 5000&)
> > >     Loop While lngResult = WAIT_TIMEOUT
> > 
> > WaitForSingleObjectは、タイムアウトorプロセス終了or異常終了するまで
> > 関数から戻ってきません。DoLoopの必要がないのでは。
> > 上の例だと、タイムアウト以外の場合、永遠にLoopを抜けられません。
> この場合、タイムアウトの時は Do〜Loop を抜けません。

終了するまで抜けられないということですよね。


> > 戻ってきても、WAIT_TIMEOUT = 258になるまでがとても時間がかかります。
> 「とても・・・」ってどのくらい?
> 試していないのですが・・・
> lngResult = WaitForSingleObject(lngHandle, 5000&)
> 5000&ミリ秒ですから、何らかの終了をしなければ
> 5秒間は戻らないのでは・・・
> ※第二引数には、タイムアウトを起こさずに何らかの
>  終了でのみ結果を戻す値もあります、調べてみて下さい。

戻ってくる時は1分ぐらいかかります。
でもほとんどがもどってきません。
5秒ごとに終了しているかの確認をして、
終了していればループをぬける、はずなので、
3回ぐらい(多くても)ループを回れば抜けてくれるはずなのですが、、、、


> ●お礼だけの場合は、「ひとこと掲示板」か「一般掲示板」
>  へ投稿するのがきまりです。
>  ※守らない人が多いですが・・・

はい、すみません。


>  内容の変更が無いなら、タイトル部分は一切変更せずに
>  返信する方が良いです。
>  内容が変更になる場合、新規投稿で新たなタイトルを
>  書き、元(関連)記事の情報は内容に書いたほうが
>  良いと思います。

ということで、題名を変更しました。
これからもよろしくおねがいします。
#26640-0
RE#26635:APIのWaitForSingleobject関数
> 終了するまで抜けられないということですよね。
そうです。

> > 「とても・・・」ってどのくらい?
> :
> 戻ってくる時は1分ぐらいかかります。
> でもほとんどがもどってきません。
> 5秒ごとに終了しているかの確認をして、
> 終了していればループをぬける、はずなので、
> 3回ぐらい(多くても)ループを回れば抜けてくれるはずなのですが、、、、
電卓などで動作確認をしても結果は変わりませんか?
※電卓(Calc.Exe)で動作を確認すると5秒間でタイムアウト
 が発生しますが・・・

ちなみに、終了を待つのではなさそうなので・・・
匿名26607 さんの紹介されているHPの
158番が参考になるかもしれませんね。
※仕様に合うかは動作等を確認して見て下さい
#26673-0
RE#26640:APIのWaitForSingleobject関数
> > 5秒ごとに終了しているかの確認をして、
> > 終了していればループをぬける、はずなので、
> > 3回ぐらい(多くても)ループを回れば抜けてくれるはずなのですが、、、、
> 電卓などで動作確認をしても結果は変わりませんか?
> ※電卓(Calc.Exe)で動作を確認すると5秒間でタイムアウト
>  が発生しますが・・・

電卓で実験しました。
Do〜Loopをはずしていると5秒でもどってきますが、
Do〜Loopで回すと時間がかかるか、戻ってこないです。


> ちなみに、終了を待つのではなさそうなので・・・

すみません、説明がおかしかったみたいです。
終了をまっています。


> 匿名26607 さんの紹介されているHPの
> 158番が参考になるかもしれませんね。
> ※仕様に合うかは動作等を確認して見て下さい

これも確認させていただきました。
でも、せっかくなのでWaitForSingleobjectでやってみたいです。
#26685-0
RE#26673:APIのWaitForSingleobject関数
> 電卓で実験しました。
> Do〜Loopをはずしていると5秒でもどってきますが、
> Do〜Loopで回すと時間がかかるか、戻ってこないです。
何か勘違いしてませんか?
※それとも私の読み違いですか・・・
 WaitForSingleobject関数から戻る、と言う意味ですが…


Do 〜 Loop の終了条件は「タイムアウト以外」です。
※期待しているのは「正常終了」ですが・・・

ですから、タイムアウトなら「WaitForSingleobject」
を繰返します・・・

ですから、正常な動作だと思います。

※「Do...Loop ステートメント」のヘルプにもありますが・・・
 意図的に(WhileやUntilなど終了条件以外で)ループを抜けたい
 なら、その条件で「Exit Do」をするだけです。
#26689-0
RE#26685:APIのWaitForSingleobject関数
お手数をおかけしてすみません。

> > 電卓で実験しました。
> > Do〜Loopをはずしていると5秒でもどってきますが、
> > Do〜Loopで回すと時間がかかるか、戻ってこないです。
> 何か勘違いしてませんか?
> ※それとも私の読み違いですか・・・
>  WaitForSingleobject関数から戻る、と言う意味ですが…

すみません。
関数からはもどってきます。
Do〜Loopからもどってこない、ということです。


> Do 〜 Loop の終了条件は「タイムアウト以外」です。
> ※期待しているのは「正常終了」ですが・・・

shell関数での起動が終了しても
なかなかDo〜Loopから戻ってきてくれないのです。
画面表示上は起動終了に見えても実際の内部では起動中ってこともありえるのでしょうか?
(shellがおかしいのかしら。。。?)


> ですから、タイムアウトなら「WaitForSingleobject」
> を繰返します・・・
> ですから、正常な動作だと思います。

はい。
#26691-0
RE#26689:APIのWaitForSingleobject関数
> shell関数での起動が終了しても
> なかなかDo〜Loopから戻ってきてくれないのです。
> 画面表示上は起動終了に見えても実際の内部では起動中ってこともありえるのでしょうか?

大きな勘違いがまだあるようです。

これは起動の終了を待つのではなく、終了を待つコードです。
いわゆる「閉じるボタン[×]」を押されるまで、Shellの
次のステートメントを実行させたくないなどに使います。


と言う訳で、先のReの 158番 だと思うんですが・・・
            ^^^(155番ではなく)
※実際に 158番のTipsを読んでみましたか?
このページと関連する記事:
#20981-0Shellで開いたIEを閉じる2002-05-29(水) 18:23
#5270-0プログラムの中でWaitをさせるには?2000-01-25(火) 14:05
#39907-0Timerを確実に動かす2001-03-07(水) 00:23
#27490-0Do Loopの使い方2002-03-12(火) 14:28
#5021-1画像のフェード1999-09-13(月) 00:30
#436-3関数の並行処理の方法2002-05-24(金) 03:07
#94-4Shell関数で起動したプログラムの終了を待つ処理について2003-07-28(月) 20:51
#996-0インターネットエクスプローラーの終了監視について1999-08-24(火) 19:32
#15533-0正確なウェイト2001-04-10(火) 23:55
#30550-0For文の限界2000-09-23(土) 23:36
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)