• ベストアンサー

コンソールアプリの起動結果待ち→WaitForInputIdle??

こんばんは。 以前にも質問したのですが、CreateProcessで起動させたプログラムの起動を待つために、WaitForInputIdleを使用と教わったのですが、コンソールアプリの起動の場合はWaitForInputIdleは待たずにすぐに結果を返してしまうのです。 WaitForInputIdleと同じようなことができ、かつ、コンソールアプリにも使える方法、ご存知の方がいらっしゃったら、教えてください... よろしくお願いします。

  • dole
  • お礼率35% (12/34)

質問者が選んだベストアンサー

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.1

こんにちは。itohhといいます。 >コンソールアプリの起動の場合はWaitForInputIdleは >待たずにすぐに結果を返してしまうのです。 WaitForInputIdle関数は、ウィンドウを持つアプリケーションでなくては正常に動作しません。 最終的にどういうことをしたいのかが解りませんが、 EventオブジェクトとCSingleLockオブジェクトを使ってみては如何ですか? 簡単なサンプルを載せておきますので参考にしてください。 << 親プロセス >> CEvent* m_Event=NULL; // 子プロセスを待つためのイベントを作成する。 m_Event = new CEvent( FALSE, FALSE, "Wait_Event" ); CSingleLock wkWait( CSyncObject* m_Event ); // // 子スレッドを起動するための、CreateProcess関数を実行する。 // // 子プロセスのm_Event->SetEvent()が実行されるまで待機する。 wkWait.Lock( INFINITE ); ----------------------------------------------- << 子プロセス >> 起動直後の初期処理が終わった後。 CEvent* m_Event=NULL; // Eventモジュールをシグナル状態にする // 3番目の引数は親プロセスと同じにしなければいけない m_Event = new CEvent( FALSE, FALSE, "Wait_Event" ); m_Event->SetEvent();

dole
質問者

お礼

お礼が遅くなって申し訳ありません。 無事、解決しました。 ありがとうございました。

関連するQ&A

  • CreateProcessでコンソールアプリケーションを起動するには

    コンソールアプリケーションの中で、CreateProcess関数を用いて、自分自身のアプリケーションを起動したところ、次の結果になりました。 ・CreateProcess関数自体は成功する ・タスクマネージャで確認すると自分自身が2つ起動されている ただし、コンソールアプリケーションのウィンドウは1つしか開かず、そのウィンドウを2つのアプリケーションで共有しているかのように動作します(printfによるメッセージが2重に表示されるなど)。 使用言語はVC++ .NET 2008で、デバッガによる動作をさせています。 詳しい方、宜しくお願いします。

  • CreateProcessで起動したアプリの監視

    はじめまして、E46-M3と申します。 さっそくですが、CreateProcessを使って他の プログラムを起動した際、その起動したプログラムを 監視することは出来ないのでしょうか? 具体的に言いますと、 CreateProcessで起動させたプログラムが 終了したか、していないか または、異常終了したか などの判断をしたいのですが・・・ どなたかご存知な方がいましたら 是非教えて下さい。よろしくお願いします。

  • MFCをDLL化してコンソールアプリから起動

    MFCアプリケーション(プロジェクト作成でMFCアプリケーションを選択)をDLL化して、コンソールアプリケーションからこのMFCをマルチスレッドで起動する方法を教えてください。MFCが起動後、コンソールアプリケーションの処理は次に進行し、MFCは操作可能な状態(アイコンなどがクリック可能で、青丸クルクルにはならない)にしたいです。また、コンソールアプリケーションからもMFCが操作可能にしたいです(例えば、コンソールアプリからAと入力するとファイルのオープンダイアログが開く、、、とか)。

  • コンソールアプリを使いたい

    .sndを.waveに変換したくて調べてみると、 snd2wavというコンソールアプリを使えば変換できることが分かりました。 しかし今までコマンドプロンプトに触れたことがなく あれこれ調べつつやってみても、なかなかこのアプリを起動(?)させることができません。 ですので初心者にも分かりやすいコマンドプロンプトの使い方を載せているサイトなどあれば教えてほしいです。

  • C#のコンソールアプリ

    起動時に引数としてファイルの絶対パスを与え、そのファイルの内容を表示させる、というコンソールアプリを作成しようとしています。 このとき、引数にはエスケープ文字が入ることが予想されますが、そのまま処理に使用できるのでしょうか?

  • コンソールアプリの起動パラメータ について

    ・環境   XP, Borland C++ Compiler 5.5 ・使用言語   C++ コンソールアプリを作成しています。 コンパイルして出来上がったEXEのアイコンに、何かファイルを ドラッグ&ドロップすると、そのファイルがパラメータとなって EXEが起動されると思うのですが、ここで疑問があります。 (1)最大パラメータ数というのはどこかに規定されているのでしょうか。 (2)複数のファイルをドラッグ&ドロップした時に、EXEに渡される順番というのはどのように決定されるのでしょうか。 よろしくお願い致します。

  • 32bitアプリから64bitアプリの起動について

    32bitアプリから64bitアプリの起動について Windows 7 Professional 64bit上で、32bitアプリから64bitアプリをCreateProcessで起動して利用しているのですが、複数のPCで問題なく動作するのですが、64bitアプリの起動ができずエラーになるPCがあり原因がわからず困っています。 何か原因として考えられることはないでしょうか?

  • 他アプリの起動

    builderC++を使用してます。 sample.exeを起動した際にもう一つの他アプリ(sample2.exe)を起動させ、 sample.exeを終了した際に一緒に起動したsample2.exeも終了させるコードはどういう風に書けばよろしいですか? WindowsAPIのCreateProcessを使い起動させようとしてます。 ご教授お願いします。

  • コンソールの出力をパイプでダイレクトに受け取りたい(VB)

    標記の件、お聞きします。 他のクライアント(VBアプリ等)からの利用が想定されていないコンソールアプリには、実行結果がコンソール(DOSプロンプト)にしか出力できないものが多いと思います。 このようなプログラムをVBで利用する場合、出力を一度ファイルにリダイレクトしてから、そのファイルをVBで読み込む方法が一般的だと思いますが、ファイルを介することなく、パイプ等を使用して出力を直接VBで受け取ることは可能でしょうか? 私が調べた限りでは方法を見つけられなかったのですが、ご存知の方教えてください。 そもそも、C++、COM(ActiveX)の知識、スキルがあれば、VBから使いやすいインターフェイスを作ることはいくらでも可能な訳で、パイプにこだわる必要はなさそうですが・・・。 仕事でも学校の課題(笑)でもないので、暇なときに気が向いたらコメントを頂けると幸いです。  

  • Eclipseのコンソールを常に表示させておきたい。

    Eclipseでプログラムを実行すると、結果がコンソールに出る場合は、コンソールが出てそこに結果が出力されると思うのですが、出力された後に、ソースコードの部分をクリックするとコンソールが閉じてしまいます。 常に出しておく方法はあるでしょうか?

    • ベストアンサー
    • Java