void CGUIDlg::OnOK()
{
// TODO: Add extra validation here
m_pThread = AfxBeginThread(IniThread, this);}
UINT CGUIDlg::IniThread(LPVOID pParam)
{
CGUIDlg* dlg = (CGUIDlg*)pParam;
dlg->WriteThread();
dlg->m_pThread = NULL;
AfxEndThread(0);
return 0;
}
int i=0;
void CGUIDlg::WriteThread()
{
CString str; while (i<10000000)
{
str.Format("%d",i);
m_Thread.SetWindowText(str.GetBuffer(0));
i++;
}}void CGUIDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString str;
str.Format("%d",j);
while (j<10000000)
{
Sleep(1000);
m_Thread.SetWindowText(str.GetBuffer(0));
j++;
}
}
我先按OnOk,线程开启,控件更新数据,
一旦我按下onbutton,为什么子线程就停了,挂起状态。我中间已经sleep()了。
{
// TODO: Add extra validation here
m_pThread = AfxBeginThread(IniThread, this);}
UINT CGUIDlg::IniThread(LPVOID pParam)
{
CGUIDlg* dlg = (CGUIDlg*)pParam;
dlg->WriteThread();
dlg->m_pThread = NULL;
AfxEndThread(0);
return 0;
}
int i=0;
void CGUIDlg::WriteThread()
{
CString str; while (i<10000000)
{
str.Format("%d",i);
m_Thread.SetWindowText(str.GetBuffer(0));
i++;
}}void CGUIDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString str;
str.Format("%d",j);
while (j<10000000)
{
Sleep(1000);
m_Thread.SetWindowText(str.GetBuffer(0));
j++;
}
}
我先按OnOk,线程开启,控件更新数据,
一旦我按下onbutton,为什么子线程就停了,挂起状态。我中间已经sleep()了。
是整个对话框线程停止。
再有你是2个线程不停的访问同一个类内成员,MFC有优先级的吧,优先主线程的消息响应,你代码本身就有问题,没人会在OnButton1()事件里写个死循环的
怎么响应m_Thread.SetWindowText(WM_SETTEXT消息)
{
CString str;while (i<10000000)
{
str.Format("%d",i);
m_Thread.SetWindowText(str.GetBuffer(0));
i++;
}}
你这句是要让谁执行的?其实就是让UI线程响应WM_SETTEXT,更新控件值
现在UI线程都被你的while循环和Sleep给阻塞死了,它怎么响应WM_SETTEXT既然UI线程响应不了WM_SETTEXT,你的子线程在执行m_Thread.SetWindowText(str.GetBuffer(0))一直得不到返回,它不也被阻塞了吗你指望有什么效果?
用法也有问题为啥不直接m_Thread.SetWindowText(str);
另外你用了GetBuffer,为什么不ReleaseBuffer
lz先看windows核心编程,和win32多线程吧。
建议OnButton1做成线程