Do not use on any
shared computer
August 30, 2008 01:12am pdt
 
[x]
Attachment Details

MFC UpdateData and Threading problems

Tags: MFC C++
Im having a weird problem with a MFC Dialog program Im writing and I cannot find a good solution. Im hoping someone might have an answer.

The problem is with the UpdateData function when new data is to be placed on in the dialog panel called PanelDlg. Im running two threads that are IDENTICAL in every aspect, except on which channel it should be reading

I have two worker threads that I am constantly running because it needs to listen at a PCI card for incoming data. Both the thread and the main Dialog classes are using DLLIMPORT functions: the worker threads to LISTEN and send a message when incoming data is being recieved from a channel, and within the Dialog panel itself, read the data and update the screen.

Some notes:

CH1_text and CH2_text are CString variables and they are connected to the dialog box by using:

      DDX_Text(pDX, CH1_INCOMING, CH1_text);
      DDX_Text(pDX, CH2_INCOMING, CH2_text);

And CH1_INCOMING and CH2_INCOMING are RichEdit boxes on the dialog panel.

Also you may notice that while I am passing WPARAM and LPARAM back to the main Dialog class, no data is being sent. This is because I only want to raise the event and have the functions themselves recieve the data and then update as it is written in onFlag1 and onFlag2 functions of the dialog class.

The threads are working properly and they are indeed firing the correct messages, therefore the functions in PanelDlg are being called correctly as well.

The problem: Only the function onFlag1 will update, but not on the function onFlag2. Ive tried using UpdateData(TRUE) and without it, but I get the same results.

Does any one have any ideas on what Im doing wrong?

Steve

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
------ global.h file
 
typedef struct _THREADINFOSTRUCT
{
	HWND hWnd;
	CString cString;
} THREADINFOSTRUCT;
 
 
------ PanelDlg.cpp file:
 
THREADINFOSTRUCT *myStruct = new THREADINFOSTRUCT;
 
 
PanelDlg::DoDataExchange(CDataExchange* pDX)
{
// Some code here...
 
BEGIN_MESSAGE_MAP(CSubAssemblyPanelDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
 
	// .... more stuff
 
	ON_MESSAGE(WM_ONFLAG1, onFlag1)
	ON_MESSAGE(WM_ONFLAG2, onFlag2)
 
 
END_MESSAGE_MAP()
}
 
BOOL PanelDlg::OnInitDialog()
{
	// ... some code
 
	MyStruct->hWnd = m_hWnd;
	tis->cString = "Main Dialog Thread";
	s1Thread = AfxBeginThread(s1.ThreadProc1, myStruct, THREAD_PRIORITY_NORMAL,0,0,0);
	s2Thread = AfxBeginThread(s1.ThreadProc2, myStruct, THREAD_PRIORITY_NORMAL,0,0,0);
 
	// ... some code
 
}
 
LPARAM PanelDlg::onFlag1(WPARAM wParam, LPARAM lParam)
 
{
      int count, i;
      char inchar;
      //UpdateData(TRUE);
      NumBytesWaiting(ch1,&count);
      for (i = 0; i < count; i++)
 
      {
            ReceiveByte(ch1, &inchar);
            CH1_text.AppendChar(inchar);
      }
 
      UpdateData(FALSE);      //THIS LINE DOES UPDATE CORRECTLY
      return 0;
}
 
 
LPARAM PanelDlg::onFlag2(WPARAM wParam, LPARAM lParam)
 
{
      int count, i;
      char inchar;
      //UpdateData(TRUE);
 
      NumBytesWaiting(ch2,&count);
      for (i = 0; i < count; i++)
 
      {
            ReceiveByte(ch2, &inchar);
            CH2_text.AppendChar(inData.inchar);
      }
 
      UpdateData(FALSE);    <---DOES NOT UPDATE THE DIALOG BOX! 
 
     return 0;
 
}
 
---- thread.h file
 
#define WM_ONFLAG1 (WM_USER+0x101)
#define WM_ONFLAG2 (WM_USER+0x102)
 
---- thread.cpp file
 
UINT serial1::ThreadProc1(LPVOID lParam)
{
	THREADINFOSTRUCT *tis = (THREADINFOSTRUCT*)lParam;
	int status;
	int cnt;
 
	while (true)
	{
		// TODO: add code here
		
		status = Wait_For_Interrupt(ch1, 100); // channel 1 for 100 msec
 
		if (status >= 0)
		{
			NumBytesWaiting_SER(serial_ch0,&cnt);
			if (cnt > 0)
				PostMessage(tis->hWnd,WM_ONFLAG1,0,0);
 
		}
	}
 
	return 0;
}
 
UINT serial1::ThreadProc2(LPVOID lParam)
{
	THREADINFOSTRUCT *tis = (THREADINFOSTRUCT*)lParam;
	int status;
	int cnt;
 
	while (true)
	{
		// TODO: add code here
		
		status = Wait_For_Interrupt(ch2, 100);  // channel 2 for 100 msec
 
		if (status >= 0)
		{
			NumBytesWaiting_SER(serial_ch0,&cnt);
			if (cnt > 0)
				PostMessage(tis->hWnd,WM_ONFLAG2,0,0);
 
			 
		}
	}
 
	return 0;
}
Start your free trial to view this solution
[x]
The Solution Rating System

With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.

  • The Grade of the Solution
  • The Zone Rank of the Expert Providing the Solution
  • The Number of Author and Expert Comments
  • The Number of Experts Contributing
  • The Feedback of the Community

Your Input Matters
Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site.

If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support.

Thank you!

Question Stats
Zone: Programming
Question Asked By: deafie_sb
Solution Provided By: AndyAinscow
Participating Experts: 2
Solution Grade: B
Views: 38
Translate:
Loading Advertisement...
 
[+][-]Expert Comment by AndyAinscow

Rank: Genius

Expert Comment by AndyAinscow:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Author Comment by deafie_sb
Author Comment by deafie_sb:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Expert Comment by AndyAinscow

Rank: Genius

Expert Comment by AndyAinscow:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Author Comment by deafie_sb
Author Comment by deafie_sb:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Author Comment by deafie_sb
Author Comment by deafie_sb:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Expert Comment by alb66

Rank: Guru

Expert Comment by alb66:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Expert Comment by AndyAinscow

Rank: Genius

Expert Comment by AndyAinscow:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Expert Comment by AndyAinscow

Rank: Genius

Expert Comment by AndyAinscow:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Author Comment by deafie_sb
Author Comment by deafie_sb:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Expert Comment by alb66

Rank: Guru

Expert Comment by alb66:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Author Comment by deafie_sb
Author Comment by deafie_sb:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Expert Comment by AndyAinscow

Rank: Genius

Expert Comment by AndyAinscow:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Author Comment by deafie_sb
Author Comment by deafie_sb:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Expert Comment by AndyAinscow

Rank: Genius

Expert Comment by AndyAinscow:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Author Comment by deafie_sb
Author Comment by deafie_sb:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Expert Comment by AndyAinscow

Rank: Genius

Expert Comment by AndyAinscow:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Author Comment by deafie_sb
Author Comment by deafie_sb:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Accepted Solution by AndyAinscow

Rank: Genius

Accepted Solution by AndyAinscow:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Author Comment by deafie_sb
Author Comment by deafie_sb:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Expert Comment by alb66

Rank: Guru

Expert Comment by alb66:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Author Comment by deafie_sb
Author Comment by deafie_sb:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Expert Comment by AndyAinscow

Rank: Genius

Expert Comment by AndyAinscow:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
[+][-]Author Comment by deafie_sb
Author Comment by deafie_sb:

All comments and solutions are available to Premium Service Members only.

Start your 7-day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
Loading Advertisement...
20080723-EE-VQP-34 / EE_QW_2_20070628