Я пытаюсь научиться использовать семафоры и _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;
Процесс один:
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 ) );
} ;
Процесс два (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 );
(и я не знаю, почему это так).Я хочу, чтобы они нормально работали с семафорами, я пробовал много раз, но безрезультатно :( Что не так с этими программами?