Mam taką funkcję:
KOD cpp: UKRYJ
void __fastcall TFrmMain::GetHotKey(TMessage &Msg) {
if(wykresy->GetTrybOnlineAktywny()) {
if(Msg.WParam == id1 && wykresy->PobierzWykresDlaOnline(1) != -1) { // Dane 1
DanaOnline = CzytajPlik(pFile1);
DataOnline = Date().CurrentDateTime();
wykresy->DodajDaneOnline(DataOnline, DanaOnline, 1); // Dodawanie danych i przeliczanie danych
asgridOnline->Cells[2][1] = DataOnline.DateTimeString();
asgridOnline->Cells[3][1] = DanaOnline;
}
}
HotKey(Msg);
}
if(wykresy->GetTrybOnlineAktywny()) {
if(Msg.WParam == id1 && wykresy->PobierzWykresDlaOnline(1) != -1) { // Dane 1
DanaOnline = CzytajPlik(pFile1);
DataOnline = Date().CurrentDateTime();
wykresy->DodajDaneOnline(DataOnline, DanaOnline, 1); // Dodawanie danych i przeliczanie danych
asgridOnline->Cells[2][1] = DataOnline.DateTimeString();
asgridOnline->Cells[3][1] = DanaOnline;
}
}
HotKey(Msg);
}
Funkcja służy do pobierania danych z pliku na podstawie HOT_KEY-a. Wszystko działa super dopóki dane nie zaczynają przychodzić co 100 [ms]. Zaczyna się to wszystko kolejkować. Dzieje się tak dlatego, że przeliczenie danych może trwać dłużej niż czas przyjścia kolejnej danej.
Próbowałem to zabezpieczyć tak:
KOD cpp: UKRYJ
void __fastcall TFrmMain::GetHotKey(TMessage &Msg) {
if(wykresy->GetTrybOnlineAktywny()) {
if(Msg.WParam == id1 && wykresy->PobierzWykresDlaOnline(1) != -1) {
if(FlagaOnline) { goto KONIEC; }
FlagaOnline = true;
DanaOnline = CzytajPlik(pFile1);
DataOnline = Date().CurrentDateTime();
wykresy->DodajDaneOnline(DataOnline, DanaOnline, 1);
asgridOnline->Cells[2][1] = DataOnline.DateTimeString();
asgridOnline->Cells[3][1] = DanaOnline;
FlagaOnline = false;
}
}
KONIEC:
HotKey(Msg);
}
if(wykresy->GetTrybOnlineAktywny()) {
if(Msg.WParam == id1 && wykresy->PobierzWykresDlaOnline(1) != -1) {
if(FlagaOnline) { goto KONIEC; }
FlagaOnline = true;
DanaOnline = CzytajPlik(pFile1);
DataOnline = Date().CurrentDateTime();
wykresy->DodajDaneOnline(DataOnline, DanaOnline, 1);
asgridOnline->Cells[2][1] = DataOnline.DateTimeString();
asgridOnline->Cells[3][1] = DanaOnline;
FlagaOnline = false;
}
}
KONIEC:
HotKey(Msg);
}
Ale to nie działa jak trzeba ( trochę dziwne, bo w przypadku timera i zabezpieczenie żeby kolejne takty zegara nie nachodziły na siebie - działa dobrze ).
Chciałbym zabezpieczyć to tak ( nawet kosztem utraty niektórych danych ) żebym nie mógł dodać kolejnej danej dopóki nie skończę obliczeń w funkcji DodajDaneOnline
Ps. Proszę się nie czepiać etykiety Używam bo pisząc czasem coś na procesor ( tam to jest podstawowa instrukcja ) coś tam zostaje w nawykach
Z góry dzięki za pomoc.
Pozdrawiam,