Avatar billede romsen Nybegynder
23. februar 2005 - 11:07 Der er 1 løsning

Problem med GetCommMask

Hej....

Jeg vil gerne have nedenstående eks. til at virke. Problemet med koden er at den går ud og læser bufferen hver gang i stedet for at vente på 'EventChar'en bliver skrevet i bufferen. Jeg skal IKKE bruge WaitCommMask, medmindre man kan sætte en timeout på den! Eftersom den stopper programmet så man ikke kan skrive noget på tasteturet mens programmet kører fordi WaitCommMask venter på EventChar vil blive skrevet i bufferen.

Jeg skal nok prøve at beskrive det bedre hvis I har spørgsmål! :D

***************************Kode Begynd***************************

#include <stdio.h>
#include <windows.h>
#include <conio.h>

void SetTimeOut(HANDLE Port, int sec)
{
  COMMTIMEOUTS commtimeouts;
  GetCommTimeouts(Port, &commtimeouts);
  commtimeouts.ReadIntervalTimeout = 1000*sec;
  commtimeouts.ReadTotalTimeoutMultiplier = 10;
  commtimeouts.ReadTotalTimeoutConstant = 1000*sec;
  SetCommTimeouts(Port, &commtimeouts);
}

void Tx(HANDLE Port, const char *data)
{
  DWORD Dummy;
  WriteFile(Port, data, strlen(data), &Dummy, 0);

}

void Rx(HANDLE Port)
{
  char Buffer[128];
  DWORD Length, i;

  ReadFile(Port, Buffer, 128, &Length, 0);

  for(i = 0; i < Length; i++)
        printf("%c", Buffer[i]);
}

int main(void)
{
 
  DWORD dwEvtMask = 0;
  OVERLAPPED o;
 
  DCB dcb;
  HANDLE ComPort = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

  GetCommState(ComPort, &dcb);
  dcb.EvtChar = '\n';
  SetCommState(ComPort, &dcb);
  SetTimeOut(ComPort, 1);
  SetCommMask(ComPort, EV_RXFLAG);
 
 
  int in1, DONE = 0;
  char in2[128];
 
  while(!DONE)
  {
    if (kbhit())
    {
      if ((in1 = getch()) == '\x1B')
      {
      DONE = 1;
      }
      else
      {
      putch(in1);
      in2[0] = in1; 
      Tx(ComPort, in2);
      }
    } 
    if(GetCommMask(ComPort, &dwEvtMask))
    {
      if(dwEvtMask & EV_RXFLAG)
      {
      Rx(ComPort);
      }
    }
  }
 

  CloseHandle(ComPort);
}

**************************Kode Slut******************************

På forhånd tak! :D

Romsen
Avatar billede romsen Nybegynder
04. april 2005 - 07:42 #1
Jeg har fundet ud af det, så jeg lukker spørgsmålet!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
I går 17:10 Joomla artikler Af rmadsen80 i CMS-systemer
I går 16:54 Printervalg til kontor Af tumben i Printere
I går 15:08 Http client med X509Certificate2 Af joki i C#
I går 13:02 Hjemmenetværk Af Andfer i LAN/WAN
I går 11:17 Chrombook Af lurup i Andre styresystemer