Witam,
Mam "Program Matka" oraz "Program dziecko".
Schemat działania:
Matka uruchamia Dziecko
Dziecko na starcie wykonuję funkcję pierwszą
Jeśli skończy, to musi powiadomić o tym matkę. Ja wykorzystałem zapisywanie do pliku tekstu "GOTOWE".
Matka sprawdza plik i widzi, że jest tam napis, więc go usuwa i powtarza cały proces.
Jeśli matka już uruchomiła 5 DZIECI i każdy wykonał swoją funkcję 1, to teraz matka zapisuje w pliku tekst "START".
Dzieci po wykonaniu funkcji pierwszej sprawdzały, czy w pliku jest tekst "START". Jeśli jest, to wykonują funkcję drugą.
Po wykonaniu funkcji drugiej wszystkie dzieci są zamykane (procesy).
MATKA - Sprawdzanie czy w pliku jest tekst "GOTOWE"
While True
czyJest = File.ReadAllText("C:\Users\Administrator\Desktop\BOT DZIECKO\plik.txt")
If (czyJest.Contains("GOTOWE")) Then
licznik += 1
File.WriteAllText("C:\Users\Administrator\Desktop\BOT DZIECKO\plik.txt", "")
Exit While
Else
Threading.Thread.Sleep(10000)
End If
End While
DZIECKO - Sprawdzanie czy w pliku jest tekst "START"
While True
linia = File.ReadAllText("C:\Users\Administrator\Desktop\BOT DZIECKO\start.txt")
If (linia.Contains("start")) Then
Exit While
Else
Threading.Thread.Sleep(20000)
End If
End While
Taki program działał mi 10 godzin, jednak wczoraj z jakiegoś powodu po wykonaniu funkcji pierwszej pierwszego dziecka program MATKA tego nie zauważył. Być może w tym samym momencie dziecko zapisywało treść do pliku, kiedy MATKA go odczytywała. Nie było żadnego błędu (nie ma też try catch). W pliku też nie było tekstu "GOTOWE" mimo, iż funkcja pierwsza została wykonana.
Powinienem chyba wybrać inną metodę komunikacji między programami. Co możecie mi polecić? Myślałem nad skorzystaniu z czegoś takiego, że MATKA będzie uruchamiała kolejne dziecko w momencie, kiedy plik został zmodyfikowany. Zdaje się, że jest taka funkcja. Są jakieś lepsze pomysły?