?
__fastcall TSerThread::TSerThread(void) : TThread(False)
{
// Thread-Initialisierung
FreeOnTerminate = true;
}
void __fastcall TMainForm::InitSerThread(void)
{
//--- Serial Terminal Thread anlegen ----
SerThread=new TSerThread(); // Thread anlegen
}
void __fastcall TMainForm::TerminateThread(void)
{
//--- Serial Terminal Thread löschen ----
SerThread->Terminate();
}
void __fastcall TSerThread::Execute()
{
// Thread-Routine, wird beim Start des Thread durchlaufen
#define TempBufSize 46096
DWORD InQue, OutQue;
DWORD ToRead, HasRead;
unsigned char Buf[TempBufSize]; // temporärer Empfangspuffer
AnsiString AsZeichen;
DWORD e;
char Empfanstext[100];
int a,i,x,y,z,f;
i=0;
while (!Terminated)
{
i++;
//MainForm->TerminalChild->LabelRxD->Caption=IntToStr(i);
if (WaitCommEvent(MainForm->Cid,&e,NULL))
{
// An der Schnittstelle ist vorgegebenes Ereignis aufgetreten
DataInBuffer(MainForm->Cid,&InQue,&OutQue);
//MainForm->TerminalChild->LabelTxD->Caption=IntToStr(OutQue);
if (InQue>0)
{
// Daten stehen im Empfangspuffer
ToRead=InQue;
if (ToRead>TempBufSize)
{
ToRead=TempBufSize;
}
//RS232 Daten in Buf auslesen
if (!ReadFile(MainForm->Cid,&Buf,ToRead,&HasRead,&Overlapped))
{
LPTSTR lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Display the string.
MessageBox( NULL, lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
}
// Empfangene Zeichen in MemoRxD übernehmen
Buf[HasRead]=0;
for (f=0;f<HasRead;f++)
{
MainForm->uiTimeout=0;
AsZeichen=AsZeichen.IntToHex((unsigned int)Buf[f],2)+" ";