thread related issue
-
hi all, i am having one problem with threading i created one dialog based application whose work is to read the data from serial port and display it.so i created one thred for this work. means now i got two threads one is application thread and other is serial communication thread which is created in OnInitDialog. now everything is working i mean the thread got created it read some bytes from port and now it wants to show the data so need to send this data to main thread. so i am doing this with ::SendMessage() but it is giving access violation. i don't know why this is happening and currently i am not sending the data also i.e. buffer so please help me below is code (stepwise) 1)In Oninitdialog THREADPARAM *ptp = new THREADPARAM; if(ptp) { memset(ptp->array,0,30); strcpy(ptp->array,"Harshal"); ptp->appHandle = this->m_hWnd; hSerialThread = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) SerialCommunication, (LPVOID) NULL, 0, &dwSerialThreadID); } 2)Thread function UINT SerialCommunication(LPVOID pParam) { int write_req=0; THREADPARAM *ptp = (THREADPARAM *)pParam; while(1) { if(write_req == 2)// send write request and read it { DWORD length=0; DWORD dwRead=0; if (WriteFile(hCom, SEND_CMD, // pointer to data to write to file NOOFBYTE, // number of bytes to write &length, // pointer to number of bytes written NULL) == 0) {// write failed write_req = 0; continue; } // writefile succeeded issue readfile char buffer[MAX_MESSAGE]; memset(buffer,0,MAX_MESSAGE); if (!ReadFile(hCom, buffer, MAX_MESSAGE, &dwRead, NULL)) { write_req = 0; continue; } if(dwRead > 0) { //MessageBox(NULL,buffer,"Data with packet",MB_OK); ::SendMessage(ptp->appHandle,MY_SHOW_DATA,0,0);// error is here } write_req = 0; }
-
hi all, i am having one problem with threading i created one dialog based application whose work is to read the data from serial port and display it.so i created one thred for this work. means now i got two threads one is application thread and other is serial communication thread which is created in OnInitDialog. now everything is working i mean the thread got created it read some bytes from port and now it wants to show the data so need to send this data to main thread. so i am doing this with ::SendMessage() but it is giving access violation. i don't know why this is happening and currently i am not sending the data also i.e. buffer so please help me below is code (stepwise) 1)In Oninitdialog THREADPARAM *ptp = new THREADPARAM; if(ptp) { memset(ptp->array,0,30); strcpy(ptp->array,"Harshal"); ptp->appHandle = this->m_hWnd; hSerialThread = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) SerialCommunication, (LPVOID) NULL, 0, &dwSerialThreadID); } 2)Thread function UINT SerialCommunication(LPVOID pParam) { int write_req=0; THREADPARAM *ptp = (THREADPARAM *)pParam; while(1) { if(write_req == 2)// send write request and read it { DWORD length=0; DWORD dwRead=0; if (WriteFile(hCom, SEND_CMD, // pointer to data to write to file NOOFBYTE, // number of bytes to write &length, // pointer to number of bytes written NULL) == 0) {// write failed write_req = 0; continue; } // writefile succeeded issue readfile char buffer[MAX_MESSAGE]; memset(buffer,0,MAX_MESSAGE); if (!ReadFile(hCom, buffer, MAX_MESSAGE, &dwRead, NULL)) { write_req = 0; continue; } if(dwRead > 0) { //MessageBox(NULL,buffer,"Data with packet",MB_OK); ::SendMessage(ptp->appHandle,MY_SHOW_DATA,0,0);// error is here } write_req = 0; }
-
hi all, i am having one problem with threading i created one dialog based application whose work is to read the data from serial port and display it.so i created one thred for this work. means now i got two threads one is application thread and other is serial communication thread which is created in OnInitDialog. now everything is working i mean the thread got created it read some bytes from port and now it wants to show the data so need to send this data to main thread. so i am doing this with ::SendMessage() but it is giving access violation. i don't know why this is happening and currently i am not sending the data also i.e. buffer so please help me below is code (stepwise) 1)In Oninitdialog THREADPARAM *ptp = new THREADPARAM; if(ptp) { memset(ptp->array,0,30); strcpy(ptp->array,"Harshal"); ptp->appHandle = this->m_hWnd; hSerialThread = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) SerialCommunication, (LPVOID) NULL, 0, &dwSerialThreadID); } 2)Thread function UINT SerialCommunication(LPVOID pParam) { int write_req=0; THREADPARAM *ptp = (THREADPARAM *)pParam; while(1) { if(write_req == 2)// send write request and read it { DWORD length=0; DWORD dwRead=0; if (WriteFile(hCom, SEND_CMD, // pointer to data to write to file NOOFBYTE, // number of bytes to write &length, // pointer to number of bytes written NULL) == 0) {// write failed write_req = 0; continue; } // writefile succeeded issue readfile char buffer[MAX_MESSAGE]; memset(buffer,0,MAX_MESSAGE); if (!ReadFile(hCom, buffer, MAX_MESSAGE, &dwRead, NULL)) { write_req = 0; continue; } if(dwRead > 0) { //MessageBox(NULL,buffer,"Data with packet",MB_OK); ::SendMessage(ptp->appHandle,MY_SHOW_DATA,0,0);// error is here } write_req = 0; }
harsha_1234 wrote:
Thanks and regards
Scope Problem! you are not passing your PTP variable to Thread!
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers, Alok Gupta VC Forum Q&A :- I/ IV Support CRY- Child Relief and You