WriteFile()
-
hi leuet,
es ist zwar wochenende, aber ich hab trotzdem mal ne frage.
ich hab den com-port overlapped geöffnet. sende eine 4-stellige zahl zu einem anderen rechner und bekomme je nach zahl eine andere antwort. jetzt das problem:
CreateFile() wird immer mit FILE_FLAG_OVERLAPPED ausgeführt.
wenn ich jetzt writefile() ohne overlapped ausführe, funktioniert alles. aber nur solange die schnittstelle auch daten zurückliefert. wenn der rechner an den ich die zahl schicke nicht antwortet, wartet das programm solange auf daten, bis welche kommen und nicht nur 50msek wie eingestellt.
führe ich nun writfile()auch overlapped aus, wie in dem code unten läuft das programm zwar, aber es gibt ein timeout. was mache ich falsch?????a=1; while(a==1) { ComPort =CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); if(ComPort == INVALID_HANDLE_VALUE) { printf("\nCOM1 kann nicht geoeffnet werden, bitte melden Sie sich" "\nbeim Service unter Tel.: +49 "); CloseHandle(ComPort); getch(); exit(1); } dcbCommPort.DCBlength = sizeof(DCB); GetCommState(ComPort, &dcbCommPort); BuildCommDCB("9600,N,8,1", &dcbCommPort); SetCommState(ComPort, &dcbCommPort); clrscr(); printf("Pin: "); gets(pin); f=fopen("tastatursim.txt","r+"); fputs(pin,f); rewind(f); fgets(SendBuffer,5,f); fclose(f); write.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL); WriteFile(ComPort,&SendBuffer,4,&Number,&write); com.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL); SetCommMask(ComPort,EV_RXCHAR); WaitCommEvent(ComPort,&dwEventMaske,&com); //warten, bis Daten kommen dwResult=WaitForSingleObject(com.hEvent, 50); Sleep(100); switch(dwResult) //hier wir dwResult ausgewertet rückgabewert von WaitForSingleObject ist 258, //also timeout
-
-
Du rufst BuildCommDCB mit einem constanten String auf. So steht das zwar in den Docs, aber es funktioniert so nicht unter 95/98. Dort werden innerhalb der Funktion temporäre Veränderungen am String durchgeführt. Siehe Q201372
-
Du mußt die OVERLAPPED-Struktur vollständig initialisieren:
OVERLAPPED write; ZeroMemory(&write, sizeof(write)); write.hEvent = CreateEvent(...);
[ Dieser Beitrag wurde am 30.11.2002 um 21:24 Uhr von -King- editiert. ]
-
-
es ist zwar wochenende
Wir arbeiten hier 7 Tagen die Woche!!
-
vielen dank für die schnelle antwort,
ich benutze win2000, das hab ich vergessen zu sagen.
inzwischen hab ich ne lösung gefunden. die 50msek waren viel zu wenig. hab jetzt 200msek eingetragen und jetzt funzt es.
-
7g4YaX kakashki_all;5;15
-
Md1rJt kakashki_all;5;5
-
9pHzAl kakashki_all;5;5
-
pharmacy;
-
pharmacy;