[Delphi] 2 procedury korzystające z 1 pliku TXT

0

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?

0

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!

0

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 ?

0

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??

0

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ć

0

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:

  1. Wiecej odczytuje niż zapisuje
  2. Danych z czasem cały czas przybywa, może sie okazać że w końcu będą zajmować znaczącą część pamięci
  3. 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
0
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 - Ł

1 użytkowników online, w tym zalogowanych: 0, gości: 1