interthread communication
Hi,
I`ve one design question: I created one user-interface-thread for a
serial-port to write some data to the port.
Unfortunately, it seems that I have to use two user-interface threads
to get that what I want.
The first thread has a message-map, where I`ve installed a message
(ON_THREAD_MESSAGE(UWM_GET_DATA, OnGetData)). This message will be
called if some new data will be received by the ethernet connection.
void CSerialCollectDataTh::OnGetData(WPARAM wParam, LPARAM lParam)
{
if(the first call)
{
//generate second ui-thread for sending data by the serial port
m_TxSerialThread = (CSerialWrite
*)AfxBeginThread(RUNTIME_CLASS(CSerialWrite),
THREAD_PRIORITY_NORMAL, // priority 0, //
default stack size CREATE_SUSPENDED);
if ( m_TxSerialThread == NULL) return;
m_TxSerialThread ->ResumeThread();
m_TxSerialThread->PostThreadMessage(UWM_START_TX_DMX,
(WPARAM)SerialHandle, (LPARAM)0);
}
//store the ethernet data in a clist or carray
return;
}
The second ui-thread will be created if the first data (by ethernet)
will arrive.
void CSerialWrite::OnStart(WPARAM wParam, LPARAM lParam)
{
//public member of this class: handle
handle = (SerialHandle)wParam;
//install the event notification (only dummy code)
hEvent = CreateEvent(NULL,false,false,_T(""));
SetEventNotification();
TxSerialData();
}
void CSerialWrite::TxSerialData()
{
while(running)
{
//get data packets from CSerialCollectDataTh
//tx data packet (serial port)
WriteData(buffer);
//wait until all data will be txd
WaitForSingleObject(hEvent,INFINITE);
}
}
Which solutions do I have to get the data packets from the
CSerialCollectDataTh thread class to the CSerialWrite thread class?
WaitForSingleObject: the signal for the hEvent will be generated by
the device driver for this external serialport device (FTDI device).
Moreover is there a simpler solution available than the one I`m trying
to use? CSerialCollectDataTh has only the task to get all incoming
data packets by the ethernet connection collected to one clist /
cArray.
CSerialWrite will write these data packets to the serial port.
Moreover I`ve installed another thread class for the specific
Casyncsocket receiving these data packets. I`m not sure if it is much
better to collect the data packets in this thread class and getting
them by SendMessage() from the CSerialWrite() thread.
best regards
Hans