Jak dwa różne programy mogą korzystać z tej samej zmienn

0

Witam.

Jak dwa różne programy mogą korzystać z tej samej zmiennej?
Konkretnie:

  1. Jest program, który sobie działa "w tle" (niewidoczny na ekranie).
  2. Jest drugi program, ktry jest uruchamiany co jakiś czas i ma za zadanie tylko ustawić zmienną na true i sie zamknąć (zakończyć).
  3. Ten pierwszy program cały czas czyta tą zmienną i jesli ona jest true, to się uaktywnia (ShowWindow(Cośtam_MAXIMIZE)).
  4. Jak zrobi swoje (użytkownik go "schowa" - nie zamknie), to ustawia zmienną na false.

Pozdrawiam.

0

coz - nie moga, ale da sie zrobic to o czym piszesz....

Najpierw jak to wyglada. Kazda zmienna zajmuje w pamieci okreslona ilosc miejsca w zaleznosci od jej typu. kiedy programujesz, uzywasz nazw, które sa dla ciebie zrozumiałe - np. zmienna "i", albo "napis". Dla komputera jednak te nazwy sa abstrakcyjne i nie zrozumiałe, ale kompilator tłumaczy je na adresy tych zmiennych. Czyli z drugiego programu mozesz odwołac sie do konkretnego adresu w pamieci.

A teraz co trzeba zrobic.

  1. Ustalic połozenie tej zmiennej w pierwszym programie (tym w tle)
    Jak? Jesli masz zrofło, to dołoz linijke:
cout << &i; //i - zmienna typu bool
  1. Teraz w drugim programie odwołujemy sie do tego miejsca w pamieci.
    Załózmy, ze wypisało nam adres "1245064"
   *(bool*)1245064 = true; // zmienia wartosc zmiennej o adresie 1245064
0

spin: a jak przekażesz adres tej zmiennej z programu działającego w tle do tego uruchamianego co jakis czas? :)

Wojciech: może Atomy Ci pomogą?

0

a jakby użyc do tego DLL. Któryś z tych programów by ją ładował do pamięcia. Posiadała by ona zmieną wspolna dla wszystkim programów.

0

użyjcie pamięci współdzielonej i po problemie
w linuksie to semafory i te pierdoły, pod windowsa nie wiem jak to sie robi

// semafor do czego innego sluzy, bliezj mu do muteksow [mf]

0

Wystarczy zwykły obiekt typu event - nie anonimowy (CreateEvent), lub mutex, albo nawet te semafory.
Tak to byłoby chyba najlepiej - nie trzeba sprawdzać milion razy tej zmiennej, wystarczy: WaitForSingleObject, procesor może odpoczywać...

Jest jeszcze: File Mapping, wspólny dll też może być, ale w ogólnym przypadku mogą tu wystąpić kolizje (jeden sprawdza a drugi to zmienia), ale też są na to metody - np. EnterCriticalSection.

0

jesli to tylko jedna zmienna to nie mozna jej przeslac komunikatem systemowym do okienka tego 'nadrzednego' programu?

0

WM_COPYDATA

1 użytkowników online, w tym zalogowanych: 0, gości: 1