Avatar billede rbjensen Nybegynder
05. december 2003 - 20:35 Der er 5 kommentarer og
1 løsning

Ændre data i et kørende program når en ny instans startes

Med reference til http://www.eksperten.dk/spm/377728 - jeg har brug for en forbedret løsning.

Platform: Windows 2000, Borland C++ Builder.

Jeg har et program med forskellige variable.
Jeg ønsker at kunne ændre disse variable i den første instans vha. kommando linje parametre når jeg starter en ny instans af samme program, hvorefter den nye instans skal afsluttes.

Min nuværende løsning har noget shared memory som "polles" hvert sekund for at kontrollere om en ny instans har "indsendt" nogle nye data. Jeg er ikke særligt tilfreds med denne løsning, da jeg vil være nødt til at sikre mig at nye instanser startes med over et sekunds forsinkelse for at de ikke overskriver hinandens nye data.

Nogle simple kodestumper/forklaringer ønskes.
På forhånd tak.

R.B.Jensen.
Avatar billede squashguy Nybegynder
05. december 2003 - 20:53 #1
Det må kunne gøres med et MUTEX object

I den nye instans kontrollerer du om dette mutex object allerede eksisterer, hvis ja, så opdaterer du shared memory og afslutter..

CreateMutex()
Avatar billede squashguy Nybegynder
05. december 2003 - 20:55 #2
Nærlæsning..

Du kan oprette bruge events til at trigge når shared memory opdateres.

CreateEvent()
WaitForSingleObject()
OpenEvent()
Avatar billede squashguy Nybegynder
05. december 2003 - 20:56 #3
Hvis du i den primære instans opretter en ny tråd, og laver en en WaitForSingleObject().. så kan du trigge den, i den nye instans via SetEvent()
Avatar billede rbjensen Nybegynder
05. december 2003 - 20:57 #4
Jeg *har* en MUTEX til at kontrollere om mit program allerede kører - problemet er at få den første instans til kun at aflæse shared memory når det er nødvendigt, og undgå polling.
Avatar billede rbjensen Nybegynder
05. december 2003 - 22:34 #5
Ok, jeg er der næsten, men ikke helt...
Kan du forklare helt præcist hvad jeg skal have i min tråd (lad os bare sige at Form1->Label1 skal sættes til "2" hvis/når man forsøger at køre en sekundær instans af programmet)

og hvad jeg skal have i WinMain ?
(Da jeg kontrollerer om min Mutex eksisterer allerede i WinMain og dermed ikke opretter en ny instans hvis Mutex eksisterer, men blot afslutter.)
Avatar billede rbjensen Nybegynder
06. december 2003 - 00:15 #6
Wiiiiiiiieeeeeeeeh.(sp?)
Mange tak, jeg har vist fået det til at køre korrekt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester