Serial port communication app This code connects to COM 3 which has a broadband card and sends a command that returns the RSSI value. I use this program to see patterns in signal strength in certain areas.

#include &lt;Windows.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    HANDLE hSerial = CreateFile("COM3",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

    if(hSerial==INVALID_HANDLE_VALUE)
        std::cout &lt;&lt; "Insert error message";

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

    if (!GetCommState(hSerial, &amp;dcbSerialParams)) 
        std::cout &lt;&lt; "Insert error message";

    dcbSerialParams.BaudRate=CBR_9600;
    dcbSerialParams.ByteSize=8;
    dcbSerialParams.StopBits=ONESTOPBIT;
    dcbSerialParams.Parity=NOPARITY;

    if (!SetCommState(hSerial,&amp;dcbSerialParams))
        std::cout &lt;&lt; "Insert error message";


    COMMTIMEOUTS timeouts={0};
    timeouts.ReadIntervalTimeout=50;
    timeouts.ReadTotalTimeoutConstant=50;
    timeouts.ReadTotalTimeoutMultiplier=10;
    timeouts.WriteTotalTimeoutConstant=50;
    timeouts.WriteTotalTimeoutMultiplier=10;
    if(!SetCommTimeouts(hSerial, &amp;timeouts))
        std::cout &lt;&lt; "Insert error message";



    while(1)
    {
        char szBuff[50+1] = {0};
        char wzBuff[14] = {"AT+CSQ\r"};

        DWORD dZBytesRead = 0;
        DWORD dwBytesRead = 0;


        if(!WriteFile(hSerial, wzBuff, 7, &amp;dZBytesRead, NULL))
            std::cout &lt;&lt; "Write error";

        if(!ReadFile(hSerial, szBuff, 50, &amp;dwBytesRead, NULL))
            std::cout &lt;&lt; "Read Error";

        std::string subString = std::string(szBuff).substr(8,3);
        std::cout &lt;&lt; subString;

        Sleep(500);
    }

    return 0;
}
In all the test that could be an error. Do you really want to continue if there is an error?
Seems counterproductive to generate an error message and continue running. That will just generate more spurious errors.

if(hSerial==INVALID_HANDLE_VALUE)
{
    throw std::runtime_error("Insert error message");
}


Then just wrap your code in a try catch block:

try
{
    ... Code here
}
catch(std::exception const&amp; e)
{
    std::cerr &lt;&lt; "Exception: " &lt;&lt; e.what() &lt;&lt; "\n";
    throw; // re-throw so the OS can provide help if available.
}
catch(...)
{
    std::cerr &lt;&lt; "Exception: Unknown ...\n";
    throw;
}