• ベストアンサー

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を 教えていただけないでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.3

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

mamekuro
質問者

お礼

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

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

Cygwinを使いましょう。

参考URL:
http://www.cygwin.com/
mamekuro
質問者

お礼

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

noname#21528
noname#21528
回答No.1

無理です。

mamekuro
質問者

お礼

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

関連するQ&A