S
Danke für die Hinweise.
Hab den Threadfehlerbehoben, dannach lief alles.
Hier der komplette Code(funktioniert wunderbar):
#include <stdio.h>
#include <windows.h>
#include <process.h>
#define MAX 256
unsigned __stdcall SecondThreadFunc(void* pArguments);
HANDLE hCom;
int main()
{
// CREATE THREAD
HANDLE hThread;
unsigned threadID;
COMMTIMEOUTS CommTimeouts;
DWORD wieviel;//dwEvtMask;
DCB dcb;
char buf[MAX];
int boll = 0;
int rc = 1;
// Initialisiere serielle Schnittstelle
hCom = CreateFile( "COM2",
GENERIC_READ|GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
if(hCom == INVALID_HANDLE_VALUE)
{
printf("COM Port ist besetzt");
getchar();
return 1;
}
else
printf("COM Port O.k.\n");
// konfiguriere serielle Schnittstelle
boll = SetupComm(hCom, MAX, MAX); // set buffer sizes
if(boll!=0)
printf("buffer sizes O.k.\n");
else
{
printf("buffer sizes Fehler:|%d\n",GetLastError());
getchar();
return FALSE;
}
// weitere Einstellungen
dcb.DCBlength = sizeof (DCB);
GetCommState (hCom, &dcb);
dcb.BaudRate = 19200; //CBR_9600; //CBR_4800; //und mehr; einfach mal 9600 oder 19200
dcb.Parity = NOPARITY; //EVENPARITY;//ODDPARITY;
dcb.StopBits = ONESTOPBIT; //ONESTOPBIT;//TWOSTOPBITS;
if (!SetCommState (hCom, &dcb))
{
printf("Eintragung der Einstellungen Fehlgeschlagen:|%d\n",GetLastError());
getchar();
return FALSE;
}
else
printf("Eintragung O.k.\n");
// Timeouts der Schnittstelle konfigurieren
GetCommTimeouts (hCom, &CommTimeouts);
CommTimeouts.ReadIntervalTimeout = MAXDWORD;
CommTimeouts.ReadTotalTimeoutMultiplier = 0; //von msdn 0
CommTimeouts.ReadTotalTimeoutConstant = 0; //von msdn 0 // von mir 100
CommTimeouts.WriteTotalTimeoutMultiplier = 10; //von msdn 10
CommTimeouts.WriteTotalTimeoutConstant = 1000; //von msdn 1000
if (!SetCommTimeouts (hCom, &CommTimeouts))
{
printf("Eintragung der Timeouts fehlgeschlagen:|%d\n",GetLastError ());
getchar();
return FALSE;
}
else
printf("Timeouts O.k.\n");
// Starten des Threads
hThread = (HANDLE)_beginthreadex( NULL,
0,
&SecondThreadFunc,
NULL,
0,
&threadID );
if(hThread == -1 || hThread==0)
{
printf("Starten des Threads fehlgeschlagen:|%d\n",GetLastError());
getchar();
return FALSE;
}
else
printf("Thread Start O.k.\n");
while(rc)
{
memset(buf,0,MAX);
gets(buf);
if(buf[0]=='?')
exit(1);
rc = WriteFile(hCom,&buf,strlen(buf),&wieviel,NULL);
}
printf("Fehler beim Schreiben:|%d\n",rc,GetLastError());
getchar();
CloseHandle(hCom);
CloseHandle(hThread);
_endthreadex(0);
return 0;
}
unsigned __stdcall SecondThreadFunc( void* pArguments )
{
char buf[MAX];
DWORD wieviel;
int rc=1;
while(rc)
{
memset(buf,0,MAX);
rc = ReadFile(hCom,&buf,MAX,&wieviel,NULL);
if(wieviel>0)
printf("%s_\n",buf);
}
printf("Fehler beim Empfangen:|%d\n",GetLastError());
//_endthreadex(0);
return 0;
}
Sieht hoffentlich besser aus
Gruß
Scrat1