プロが教える店舗&オフィスのセキュリティ対策術

Windowsプログラムで、UNIXライクなマルチプロセス処理を書きたいのですが、
fork()が使えないようで、代替の方法がわかりません。
CreateProcess()というAPIはありますが、これは単に実行モジュールの呼び出し
を行う関数で、UNIXのようなfork()でプロセスを分けるものでは
ないようです。

子プロセス内部で、構築済みのDLLを複数ロードしたいのですが、
そのDLLはマルチスレッド対応になっていないため、
マルチスレッド処理はできません。

具体的にやりたいと思っていることをプログラム的に書くと、
およそ以下のような処理です。(UNIXでよくやる手法です)

-----
実行処理のメイン()
{
 int p_pid[128];

 for(int i=0; i<10; i++) {
  switch(pid[i]=fork()){
   case 0: // 子プロセスとしての処理
    子プロセスが呼び出す関数();
    exit(0);
   case -1:
    break;
   default:
    break;
  }
 }
}

void 子プロセスが呼び出す関数()
{
 LoadLiblary() と GetProcAddress() で、DLLを動的にロードし、
 DLL内のAPIを呼び出す。
 DLLがマルチスレッド対応でなくても、この関数は各々が別プロセスとして
 複数同時実行されるので、問題なく処理できるはず。
}

-----

この処理は、Windowsでは無理なのでしょうか?

もしできるなら、Windowsで用意されているランタイムライブラリかAPIを
教えていただけないでしょうか?

よろしくお願いします。

A 回答 (3件)

Cygwin を使うのが一つ。


もうひとつは「子プロセスが呼び出す関数」を一つの実行モジュールとして作成し、それを CreateProcess (または _beginthread 等)で起動することになります。
    • good
    • 1
この回答へのお礼

子プロセスが呼び出す関数を実行モジュールと作成する方法も検討していたところです。
やはり、現実的な解としてはそれが良いのかもしれませんね。
ありがとうございました。

お礼日時:2006/04/26 13:55

Cygwinを使いましょう。



参考URL:http://www.cygwin.com/
    • good
    • 0
この回答へのお礼

Cygwin を調べてみます。
サイトを教えていただき、ありがとうございました。

お礼日時:2006/04/26 13:56

無理です。

    • good
    • 1
この回答へのお礼

Windowsではforkと同一の処理はできないのですね。
ありがとうございました。

お礼日時:2006/04/26 13:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています