3
セマフォと_popenの使い方を学びたいと思っています。私には2つのプロセスがあります。C++セマフォと_popenの使用
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <string>
#include <sstream>
#include <iostream>
#include <process.h>
#include <fstream>
#using <System.dll>
using namespace System;
using namespace System::Threading;
using namespace std;
プロセス1:
int main(){
FILE *pPipe;
Semaphore^ _pool = gcnew Semaphore(1, 1, "pool");
Semaphore^ _eater = gcnew Semaphore(0, 1, "eater");
char psBuffer[128];
if((pPipe = _popen("D:\gen.exe", "rt")) == NULL)
exit(1);
while(!feof(pPipe)){
_eater->WaitOne();
fgets(psBuffer, 128, pPipe);
_pool->Release();
cout<<psBuffer;
}
printf("\nProcess returned %d\n", _pclose(pPipe));
} ;
プロセス2(gen.exe):
int i=0;
Semaphore^ crt = nullptr;
crt = Semaphore::OpenExisting("pool");
Semaphore^ eat = nullptr;
eat = Semaphore::OpenExisting("eater");
while(true)
{
i++;
crt->WaitOne();
cout<<i;
eat->Release();
}
};
彼らは何もしません。彼らに何かをさせる唯一の方法は、fgets(psBuffer, 128, pPipe);
を削除することです(なぜそれがわからないのですか)。
非常に非常にありがとうございました^ _ ^。 – Ophelia