Click to See Complete Forum and Search --> : help on control update from a thread


yantrak
January 12th, 2011, 06:49 AM
hi all,

following is a code snippet of my program having vc6 mfc sdi & formview as basic characteristics.

void CScada_thrdsView::dsp_cnt()
{
while (!exit_thrd)
{while(!nw_cnt) ;
sprintf(cstring,"%d",count);
m_val.InsertString((count-1),cstring);
UpdateData(FALSE);
` nw_cnt = 0;
}
}
a screen shot of the situation obtained on execution is attatched with this post.

from debugging i gather that this error is being caused due to the updatedata statement.

the function dsp_cnt is in form view but is being called from the worker thread.

i request for help in sorting out this error.

thnx
ashwani

D_Drmmr
January 12th, 2011, 07:20 AM
The simple guideline to avoid this is not to call GUI code from your worker thread. Do your work in a worker thread and post a message to the window telling it to update itself. You can pass the required information from the worker thread to the GUI using the WPARAM and LPARAM of the message, but the problem is that you basically don't know in what order the messages will be handled. So most of the time, it's better to push the information to a synchronized queue and use the message only as a notification that the GUI needs to be updated.

yantrak
January 12th, 2011, 03:14 PM
D Drmmr,

thnx for the guidance.

ashwani