Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[C++][WinAPI] - CreateFile i struktura Overlapped

Arkain 23 Aug 2012 22:11 1320 2
  • #1
    Arkain
    Level 10  
    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
  • #3
    Arkain
    Level 10  
    Dzięki serdeczne za link jednak problemem jest tu bariera językowa :/
    Angielski znam podstawowy ale brak mi wiedzy ścisło technicznej (ale ambitnie nadrabiam zaległości lecz...).

    Bardzo prosiłbym o podesłanie materiałów w języku polskim jeżeli takie istnieją bo mi nie udało się znaleźć lub JESZCZE milej byłoby gdyby ktoś przedstawił wszystko na przykładzie konkretnym i wyjaśnił wszystko w opisie lub komentarzach. Wiem że proszę o pewien wysiłek i zapewne większości nie będzie się chciało jednak liczę że ktoś podejmie się tego i wytłumaczy mi i następnym którzy będą mieli ten sam problem.

    Proszę o przykład lub odpowiedz słowną na w/w pytania/problemy ;]

    Serdeczne dzięki.


    PS: Patrząc z perspektywy czasu odnoszę smutne wrażenie że Polacy to bardzo samolubne osoby. Oczywiście nikogo nie chcę urazić i nie mówię w żadnym wypadku że wszyscy ale mając styczność z innymi kulturami widzę że pod tym względem nie mamy czym się chwalić.

    Chodzi mi o to że wiem że na tym forum jest naprawdę sporo osób które przeszły np ten temat i znają jego rozwiązanie, jednak wychodzą z założenia że skoro one się męczyły by się tego nauczyć to niech inni też się męczą... A potem same się dziwią że jak zadają pytanie to nikt nie chce udzielić odpowiedzi...
    Bardzo to smutne... Założyłem kilka tematów które miały zbierać doświadczenia innych tak by każdy w przyszłości mógł z nich czerpać i korzystać lecz opierały się one na chęci pomocy osób trzecich - tych już wtajemniczonych. Tematy odeszły w zapomnienie bo jeżeli ktoś nawet był kto rozgryzł dane zagadnienie to najczęściej wychodził z założenia że "a co ja z tego mam że komuś pomogę" i odchodził...
    Chwałą tym którzy jednak pomagają i to najczęściej bezinteresownie bo dzięki takim ludziom wszyscy się rozwijam.