Wikipedia:

dupleks (ang. full duplex) - informacje przesyłane są w obu kierunkach
jednocześnie, bez spadku transferu;

W jaki sposób najlepiej przeprowadzić transmisję jako
pełny duplex w sposób programowy poprzez RS232C.

Problem :

1.Otwieramy port - otrzymujemy uchwyt do COM -> hCom.
2.Tworzymy dwa wątki jeden czyta z COM drugi pozwala
na zapis.

Niestety - urządzenie posiada dwa bufory ale jest
dostępne poprzez jeden uchwyt (nie pomoże tu rozdzielenie
na dwie zmienne ).
Zawieszając legalnie jeden wątek w oczekiwaniu np. na odebranie
znaku [ WaitCommEvent ] następuje zablokowanie drugiego.
czyli dupa-plex....

Pseudo kod:

    HANDLE hCom = CreateFile("COM1",.....


    Watek_1_czyta(hCom)
  {

     while(..)
    {
         
        ReadFile(hCom,buf...);
         WaitCommEvent(hCom,EV_ODEBRANO...// <-- to zablokuje
                                          // oba wątki!
    }

  }
//--------------------------------------------------

    Watek_2_pisze(hCom)
  {

     while(..)
    {
         
        WriteFile(hCom,buf...);

    }

  }
//--------------------------------------------------

Które rozwiązanie zastosować?

a) Można usunąć funkcje typu Wait.. ,cyklicznie sprawdzać zawartość buforów
i pozwolić na to aby system przydzielał dostęp do hCom i czas wątkom.
( nie wiem czy to jest do końca bezpieczne)

b) Zastosować sekcje krytyczną na hCom - czyli na "przemian" jeśli aplikacja
zacznie czytać jednym wątkiem odda czas drugiemu dopiero po
zakończeniu czytania i zwolnieniu dostępu do hCom .
Wydaje się że to może sprawić że wymiana danych będzie mniej "płynna" .
c) inny sposób [?]

Tak czy inaczej ten "pełny" duplex wydaje się bardziej teoretyczny niż
możliwy do zrealizowania bo przecież wątki i tak są szeregowane .
Czy warto coś tutaj kombinować jeśli aplikacja ma działać jako terminal
tak że nie wymaga super prędkości w wymianie danych ?
Jeśli ktoś ma jakieś uwagi to proszę o wypowiedz ....