Worker thread pausing
//I am using Visual C++ 6 (working on upgrading soon)
//At the top I have:
UINT SerialThread( LPVOID Param );
//In the BEGIN_MESSAGE_MAP(...) I added:
ON_MESSAGE(MY_SERIAL, DataPresent)
ON_MESSAGE(MY_UNIT, DataUnit)
//In OnInitDialog() I have added:
AfxBeginThread(SerialThread,(LPVOID)m_hWnd);
//Actual thread to monitor serial activity:
UINT SerialThread( LPVOID Param ) //Thread to monitor serial activity
{
HWND hDlg = (HWND)Param;
int DataByte=0x00;
int i;
ercount=0;
while(TRUE){
ercount=0;
while(ercount == 0){
ercount = BytesInReceiveBuffer(m_Port);
Sleep(50);
}
DataByte=GetByte(m_Port);
if (DataByte == 0x10){ // if 1st byte was 10h ignore next
33 bytes
for (i=0; i<33; i++){
DataByte=GetByte(m_Port);
}
}
if (DataByte == 0x11){ // if 1st byte was 11h read and save
next 33 bytes
for (i=0; i<33; i++){
DataByte=GetByte(m_Port);
Bar[i]=(DataByte & 0xff); // Bar[] is a global unsigned char
string of 33 bytes
}
RunRead=1; // global variable I look for in
some loops to wait for data
::PostMessage(hDlg, MY_SERIAL, (WPARAM)0, (LPARAM)0);
}
if (DataByte == 0x20){ // if 1st byte was 20h read and save
next 1 byte
DataByte=GetByte(m_Port);
UnitSel=DataByte;
::PostMessage(hDlg, MY_UNIT, (WPARAM)0, (LPARAM)0);
}
}
return TRUE;
}
//RunRead is what I tried to us to let another routing know when data was
received.
//MY_SERIAL - updates a bargraph with the 33 bytes received
//MY_UNIT - updates a unit number
//How do I temporarily stop this thread so another area of the dialog can
control the serial port ??
//Example: I have a routing that sends a byte out the serial port to an
external microcontroller
// and I want to wait for the response within this routine...