Hallo,

vielen Dank für die Hinweise und Erklärungen.

Ich habe jetzt versucht den Code etwas aufzuräumen:

Code:
//CommSeriell.cpp

#include "stdafx.h"
#include "CommSeriell.h"


CommSeriell::CommSeriell(int a)
{
	m_run.store(true);
	m_thread = std::thread(std::bind(&CommSeriell::theThread, this));
}


CommSeriell::~CommSeriell()
{
	m_run.store(false);
	if (m_thread.joinable())
	{
		m_thread.join();
	}
}

BOOL CommSeriell::initComPort()
{
	std::cout <<std::endl<<"Serial Port  Reception (Win32 API)"<< std::endl;

	/*---------------------------------- Opening the Serial Port -------------------------------------------*/
	
	ComPortName = TEXT("COM2");
	hComm = CreateFile(ComPortName,                  // Name of the Port to be Opened
		GENERIC_READ | GENERIC_WRITE, // Read/Write Access
		0,                            // No Sharing, ports cant be shared
		NULL,                         // No Security
		OPEN_EXISTING,                // Open existing port only
		0,                            // Non Overlapped I/O
		NULL);                        // Null for Comm Devices

	if (hComm == INVALID_HANDLE_VALUE)
		std::wcout <<"\n    Error! - Port "<<ComPortName<<" can't be opened\n";
	else
		std::wcout <<"\n    Port "<<ComPortName<<" Opened\n ";

	/*------------------------------- Setting the Parameters for the SerialPort ------------------------------*/

	DCB dcbSerialParams = { 0 };                         // Initializing DCB structure
	dcbSerialParams.DCBlength = sizeof(dcbSerialParams);

	Status = GetCommState(hComm, &dcbSerialParams);      //retreives  the current settings

	if (Status == FALSE){
		std::cout <<"\n    Error! in GetCommState()";
		error = 10;
	}
	dcbSerialParams.BaudRate = CBR_19200;		// Setting BaudRate = 9600
	dcbSerialParams.ByteSize = 8;				// Setting ByteSize = 8
	dcbSerialParams.StopBits = ONESTOPBIT;		// Setting StopBits = 1
	dcbSerialParams.Parity = NOPARITY;			// Setting Parity = None 

	Status = SetCommState(hComm, &dcbSerialParams);	//Configuring the port according to settings in DCB 

	if (Status == FALSE)
	{
		std::cout <<std::endl<<"\n    Error! in Setting DCB Structure"<<std::endl;
		error = 1;
	}
	else //If Successfull display the contents of the DCB Structure
	{
		std::cout << "\n\n    Setting DCB Structure Successfull" << std::endl
			<<"\n       Baudrate = " << dcbSerialParams.BaudRate
			<<"\n       ByteSize = %d" << dcbSerialParams.ByteSize
			<<"\n       StopBits = %d" << dcbSerialParams.StopBits
			<<"\n       Parity   = %d" << dcbSerialParams.Parity;
	}
	return Status;
}

BOOL CommSeriell::setRecieveMask() {
	/*------------------------------------ Setting Receive Mask ----------------------------------------------*/

	Status = SetCommMask(hComm, EV_RXCHAR); //Configure Windows to Monitor the serial device for Character Reception

	if (Status == FALSE)
		std::cout << "\n\n    Error! in Setting CommMask";
	else
		std::cout << "\n\n    Setting CommMask successfull";
	return Status;
}

BOOL CommSeriell::recieveComPort(){
	/*------------------------------------ Setting WaitComm() Event   ----------------------------------------*/

	std::cout <<"\n\n    Waiting for Data Reception";

	do {

		Status = WaitCommEvent(hComm, &dwEventMask, NULL); //Wait for the character to be received

		/*-------------------------- Program will Wait here till a Character is received ------------------------*/

		if (Status == FALSE)
		{
			std::cout <<"\n    Error! in Setting WaitCommEvent()";
			error = 10;
		}
		else //If  WaitCommEvent()==True Read the RXed data using ReadFile();
		{
			readbuf = ReceiveData();
			std::cout <<"\n Print input\n";
			std::cout << readbuf << std::endl;
		}
		error++; //nur 10 mal ausführen
	} while (error <10);
	return Status;
}

std::string CommSeriell::ReceiveData()
{
	const int nReadSize = 256;
	std::vector<char> Buffer(nReadSize);
	unsigned long nDataRead;

	if (!ReadFile(hComm, &Buffer[0], nReadSize, &nDataRead, NULL))
	{
		std::cout<<"General Read Error";
	}

	return std::string(Buffer.begin(), Buffer.begin() + nDataRead);
}

void CommSeriell::theThread()
{
	initComPort();
	setRecieveMask();
	recieveComPort();

	CloseHandle(hComm);//Closing the Serial Port
	printf("\n +==========================================+\n");
}
Code:
// CommSeriell.h

#pragma once
class CommSeriell
{
public:
	CommSeriell(int a);
	~CommSeriell();

private:
	std::atomic<bool> m_run;
	std::thread m_thread;

	//Variablendeklarationen
	HANDLE hComm;				// Handle to the Serial port
	TCHAR  *ComPortName;		// Name of the Serial port(May Change) to be opened,
	BOOL  Status;				// Status of the various operations 
	DWORD dwEventMask;			// Event mask to trigger
	int error = 0;				// 
	std::string readbuf;		//

	//Funktiosdeklarationen
	void theThread();

	BOOL initComPort();
	BOOL setRecieveMask();
	BOOL recieveComPort();
	std::string ReceiveData();
};
Anbei auch die Variablen-Deklarationen.

Die von dir einen Thread vorher genannten Punkte habe ich hoffentlich soweit alle herausgenommen.

Anbei noch ein Bild wie die Daten jetzt ausgegeben werden.

MfG Florian

Bild