Witam. Pisze program rozproszony, gdzie miedzy procesami komunikuje sie poprzez zmienne srodowiskowe. w teorii kazdy nowo stworzony proces powinien dzidziczyc zmienne srodowiskowe od procesu tworzacego i w procesach potomnych zmienne te powinny byc od razu dostepne.
tak wyglada kod procesu macierzystego
//#include "stdafx.h"
#include <sstream>
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <iostream>
#include <conio.h>
using namespace std;
#define zmSROD TEXT("Char");
int _tmain(int argc, _TCHAR* argv[])
{
STARTUPINFO startupInfo = {0};
startupInfo.cb = sizeof(startupInfo);
PROCESS_INFORMATION processInformation;
string nazwaZmiennej = "zmSROD";
string wartoscZmiennej = "lalalala";
if( ! SetEnvironmentVariable((LPCWSTR)nazwaZmiennej.c_str(), (LPCWSTR)wartoscZmiennej.c_str()) )
cout << "nie udalo sie ustawic zmiennej srodowiskowej";
else
cout << "udalo sie ustawic zmienna srodowiskowa";
for(int i = 0; i<10 ; i++)
{
BOOL result = ::CreateProcess(
L"K:\\rozproszoneCwiczenia\\kodWykonywalny\\Debug\\kodWykonywalny.exe",
NULL,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&startupInfo,
&processInformation
);
if(result == 0)
throw std::runtime_error("Could not create process");
}
//}
return 0;
}
a tak kod procesu potomnego
//#include "stdafx.h"
#include <sstream>
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <iostream>
#include <conio.h>
using namespace std;
#define zmSROD TEXT("Char")
int _tmain(int argc, _TCHAR* argv[])
{
char out[8] = {0, };
string tekst = "zmSROD";
string tekst2 = "out";
string tekst3 = "8";
if( ! GetEnvironmentVariable((LPCWSTR)tekst.c_str(), (LPWSTR)tekst2.c_str(), (DWORD)tekst3.c_str()) )
cout<< "nie dziala";
else
cout<< "dziala";
cout<<out;
return 0;
}
No i niestety nie dziala to jak na razie, otoz ustawienie zmiennej sygnalizuje mi ze dziala, tyle ze w systemie jak sprawdzam jej nie ma. natomiast odczytanie zmiennej w ogóle zwraca wartosc zero co sygnalizuje komunikatem ze nie dziala.
co z tym zrobic ?