Już raz pisałem o tym problemie, ale słabo to wyszło więc po dalszych doświadczeniach, przedstawię problem dokładniej.
1. Mam na dysku pliki z danymi. Dane do tych plików są zrzucane za pomocą skryptu napisanego w języku MQL. Przy czym zaznaczyć muszę, że jeden odpalony skryp = 1 plik z danymi. http://docs.mql4.com/ Skrypt wygląda tak:
int FileHandle = FileOpen(NazwaPliku,FILE_CSV|FILE_READ|FILE_WRITE,Separator);
if(FileHandle<1) { Print("Błąd otwarcia"); }
else {
FileSeek(FileHandle,0,SEEK_END);
FileWrite(FileHandle,Bid);
FileClose(FileHandle);
}
return(0);
}
Zrzucany jest on jako plik *.csv. Jednak jeżeli trzeba będzie można go przerobić na plik binarny.
2. Napisałem aplikację w builderze której zadaniem jest pobieranie danych z pliku lub plików w zależności od tego ile źródeł wskażę.
Odczyt danych z pliku realizuję w timerze którego częstotliwość ustawiłem na 10 ms ( wiem, że aplikacja może tak nie chodzić )
Kod wygląda tak:
int Size = 0;
double result = 0.0;
AnsiString tmp;
if(pFile) {
fseek (pFile, 0, SEEK_END);
Size = ftell(pFile);
fseek(pFile, Size-12,SEEK_SET); // nie pamietam dlaczego zrobiłem tu 12
fread(buffor,10,1,pFile);
tmp = reinterpret_cast<const char*>(buffor);
result = atof(tmp.c_str());
}
return result;
}
3. Cały mój problem polega na tym, że czasami zdarza mi się gubić dane zwłaszcza jak odczytuje dane np z 4 plików na raz. Czy może mi ktoś poradzić jak mam realizować w aplikacji Builderowskiej odczyt danych z pliku, żeby był najbardziej efektywny - przy założeniu, że mogę czytać dane od 1 źródła do 6 max. Myślałem o wątkach, może odczyt danych z wątku byłby najlepszym rozwiązaniem ??
Mam nadzieję, że wszystko jest jasne.
Dodane:
Dodam jeszcze, że skrypt uruchamia się jeżeli ma przeslać jakieś dane, otwieram i zamykam plik za każdym razem, żeby nie blokować pliku i móc z niego czytać.