Mam 2 procedury korzystające z tego samego pliku tesktowego. Czasami sie zdarzy że procedury potrzebują go w tym samym momencie i wtedy wywala mi błąd. Do tej pory robiłem to tak że jedna procedura kopiowała ten plik w inne miejsce, tam z niego korzystała a potem kasowała. Zastanawiam sie czy jest na to inny sposób? Może bład wywala wtedy bo jedna procedura otwiera plik a druga mu go zamyka gdy ta pierwsza chce jeszcze z niego korzystać? Czy to cos da jak plik bede zamykać dopiero w OnClose formy?
a poza tym przydalo by sie dac jakos zmienna globalna, mowiaca czy ten plik jest wlasnie otworzony czy nie... jak jest to niech czeka az sie zamknie :)
ale bez watkow to sie takie cos zawiesi!
O wątkach zapewne też przeczytam. Ale z tą zmienną globalną to chyba w tym przypadku lepszy pomysł (mniej kodu) bo kazda procedura korzysta z pliku tylko przez ułamek sekundy, jednak mimo wszystko gdzieś tam w końcu staną sobie na drodze. Kiedys sam wpadłem na ten pomysł ale to był impuls i szybko mi wyleciał :D . Pamieta ktoś jaki był kod czy plik tekstowy jest aktualnie otwart/używany ?
Zastanowiła mnie postać owych procedur, które jednocześnie korzystają z pliku. Skoro jeszcze nie zastosowałeś wątków, to w jaki sposób wykonują się one jednocześnie, aby w tym samym czasie używać pliku??
przy zastosowaniu timerów to jest możliwe, ale myślę że mógłbyś to ładnie zoptymilizować, np zawartość odczytać na początku a potem operować na zmiennej a nie na plikach i dopiero w onclose zminioną wartość zapisać do pliku bo takie otwieranie, czytanie, zapisywanie non-stop jest niezdrowe dla dysku - teraz to dyski to wali w sumie chociaż też jakoś im to przeszkadza ale bardzo dawno temu w pascalu w dosie na bardzo starym kompie zepsułem dysk robiąc pętle właśnie tak robiącą którą puściłem na parę zaledwie minut - nie wiem czy się przegrzał czy coś no ale widać że jednak lepiej by było je trochę oszczędzić
Dokładnie tak jak powiedział Adamo, jedna procedura to timer wykonywany co sekunde a druga procedura to klikniecie buttona. Z tym ładowaniem do pamieci Od razu może to i dobry pomysł ale:
- Wiecej odczytuje niż zapisuje
- Danych z czasem cały czas przybywa, może sie okazać że w końcu będą zajmować znaczącą część pamięci
- W zasadzie cały czas pisze pluginy do komunikatora w DLL (nigdy nie napisałem samodzielnego execa, chyba że testy pluginów :) ), więc musze się ograniczyć maxymalnie z wykorzystaniem zmiennych, tablic, rekordów, bo jak wiadomo pluginów jest sporo a dużo osób instaluje wszystkie co może doprowadzić do zamulania kompa. Jednak powiem ci Adamo że dobiłeś mnie teraz z tym "zapisywaniem i odczytywaniem" :D . Faktycznie nie zdawałem sobie sprawy że głowica dysku cały czas pracuje i może w końcu dostać "zawału". No ale na szczęście o ile pamietam moje poprzednie rozsądnie zapisywały. Chyba jednak będę ładował większość do pamięci, jest bardziej "atletyczna" :) . I pomyśleć że chciałem napisać słownik który korzysta z bazy danych na bieżąco :D . Jednak patrząc globalnie podejście do sprawy jest zbyt sceptyczne. Przecież ile mamy takich programów które ontoper zapisują i odczytują dane, np. archiwum w komunikatorze, e-mule, DC++, Kazaa, praktycznie wszystko. Mysle że dyski są na to w tych czasach mocno przygotowane
Dibo84 napisał(a)
O wątkach zapewne też przeczytam. Ale z tą zmienną globalną to chyba w tym przypadku lepszy pomysł
ale ja wspomnialem o polaczeniu obu :P
jesli sie funkcje "spotkaja", to program moze (jesli nie uzyjesz watkow) sie powiesic :-|. A watki to doslownie kilka-kilkanascie dodatkowych linii...
// akurat wątki nie uratują przed zakleszczeniem, więc ich użycie nie ma w tym wypadku sensu - Ł