Witam Serdecznie ;]
Pisząc program komunikujący się przez RS232 natrafiłem na problem z "blokującymi" się ReadFile i WriteFile. Teraz problem jest chwilowo rozwiązany poprzez zastosowanie Timerów (jednego do odczytu i jednego do odbioru, i jeszcze jednego do analizy danych). Dzięki czemu w jednym czasie nie następuje odczyt i zapis do portu. Jednak program działa mało wydajnie, pakiet zwiera dane które są przez program reprezentowane na wykresach i widać opóźnienie jakie wynika z zastosowanego rozwiązania.
Chciałbym zastosować nakładanie (Overlapped) oraz timery zamienić na wątki by uniknąć sytuacji takich jak teraz gdy np część pakietu dotrze i nastąpi chwilowa przerwa w nadawaniu (bo urządzenie niestety czasem musi wykonać coś i dopiero po chwili wznawia dalsze wysyłanie pakietu) i w tym czasie program się zawiesza bo oczekuje na dalszą część pakietu. I chciałbym zminimalizować do minimum opóźnienia między wykresem a rzeczywistym pomiarem (minimalny czas timera 1ms).
Jednak mimo poszukiwania od kilku tygodni (w każdym wolnym czasie) informacji na temat nakładania I/O nie mogę znaleźć odpowiedzi na swoje pytania... (szczególnie w języku polskim)
Przejdę do rzeczy:
- W jakim celu i jak stosuję się strukturę Overlapped w CreateFile gdy port jest otwarty do odczytu i zapisu (kiedy sprawdza się tą strukturę i jak)?
- Czy dla ReadFile i WriteFile tworzy się dwie osobne struktury OV czy tworzymy jedną i podpinamy ją do obu funkcji i do CreateFile?
Prosiłbym osobę/by które mają doświadczenie w tym temacie o wytłumaczenie mi jak działa CreateFile ze strukturą Overlapped i jak odczytywać i zapisywać do portu stosując ReadFile i WriteFile ze strukturą Overlapped. Oraz jakie są zalety jej stosowania lub czym może grozić nie stosowanie jej, gdy program zacznę dzielić na wątki, w którym jeden będzie odpowiedzialny za odbiór danych z portu i wkładanie ich do kolejki odbioru, drugi na odczyt z kolejki wysyłania danych i wysyłanie ich do portu.
Pozdrawiam
Arkain
Pisząc program komunikujący się przez RS232 natrafiłem na problem z "blokującymi" się ReadFile i WriteFile. Teraz problem jest chwilowo rozwiązany poprzez zastosowanie Timerów (jednego do odczytu i jednego do odbioru, i jeszcze jednego do analizy danych). Dzięki czemu w jednym czasie nie następuje odczyt i zapis do portu. Jednak program działa mało wydajnie, pakiet zwiera dane które są przez program reprezentowane na wykresach i widać opóźnienie jakie wynika z zastosowanego rozwiązania.
Chciałbym zastosować nakładanie (Overlapped) oraz timery zamienić na wątki by uniknąć sytuacji takich jak teraz gdy np część pakietu dotrze i nastąpi chwilowa przerwa w nadawaniu (bo urządzenie niestety czasem musi wykonać coś i dopiero po chwili wznawia dalsze wysyłanie pakietu) i w tym czasie program się zawiesza bo oczekuje na dalszą część pakietu. I chciałbym zminimalizować do minimum opóźnienia między wykresem a rzeczywistym pomiarem (minimalny czas timera 1ms).
Jednak mimo poszukiwania od kilku tygodni (w każdym wolnym czasie) informacji na temat nakładania I/O nie mogę znaleźć odpowiedzi na swoje pytania... (szczególnie w języku polskim)
Przejdę do rzeczy:
- W jakim celu i jak stosuję się strukturę Overlapped w CreateFile gdy port jest otwarty do odczytu i zapisu (kiedy sprawdza się tą strukturę i jak)?
- Czy dla ReadFile i WriteFile tworzy się dwie osobne struktury OV czy tworzymy jedną i podpinamy ją do obu funkcji i do CreateFile?
Prosiłbym osobę/by które mają doświadczenie w tym temacie o wytłumaczenie mi jak działa CreateFile ze strukturą Overlapped i jak odczytywać i zapisywać do portu stosując ReadFile i WriteFile ze strukturą Overlapped. Oraz jakie są zalety jej stosowania lub czym może grozić nie stosowanie jej, gdy program zacznę dzielić na wątki, w którym jeden będzie odpowiedzialny za odbiór danych z portu i wkładanie ich do kolejki odbioru, drugi na odczyt z kolejki wysyłania danych i wysyłanie ich do portu.
Pozdrawiam
Arkain