- ベストアンサー
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を 教えていただけないでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Cygwin を使うのが一つ。 もうひとつは「子プロセスが呼び出す関数」を一つの実行モジュールとして作成し、それを CreateProcess (または _beginthread 等)で起動することになります。
その他の回答 (2)
- jacta
- ベストアンサー率26% (845/3158)
無理です。
お礼
Windowsではforkと同一の処理はできないのですね。 ありがとうございました。
お礼
子プロセスが呼び出す関数を実行モジュールと作成する方法も検討していたところです。 やはり、現実的な解としてはそれが良いのかもしれませんね。 ありがとうございました。