こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Windowsでのfork方法

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を
教えていただけないでしょうか?

よろしくお願いします。

投稿日時 - 2006-04-24 16:54:30

QNo.2111537

すぐに回答ほしいです

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

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

投稿日時 - 2006-04-25 19:20:42

お礼

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

投稿日時 - 2006-04-26 13:55:38

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

Cygwinを使いましょう。

参考URL:http://www.cygwin.com/

投稿日時 - 2006-04-24 20:57:16

お礼

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

投稿日時 - 2006-04-26 13:56:29

ANo.1

無理です。

投稿日時 - 2006-04-24 17:15:15

お礼

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

投稿日時 - 2006-04-26 13:57:12

あなたにオススメの質問