如何用线程解决?

jackfeige 2008-11-01 09:47:54
BOOL m_flag=FALSE;//CTestDlg public menber variable
int m_num=0; //CTestDlg public menber variable

void CTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
m_flag=TRUE;
m_num=30;
PRINT(m_num);

}

void CTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
m_flag=FALSE;
}

void CTestDlg::PRINT(int a)
{
CString temp="";
if(m_flag)
{
Sleep(1000);
m_num--;
temp.Format("%d",m_num);
((CStatic*)GetDlgItem(IDC_STATIC1))->SetWindowText(temp);
if(m_num==0)
m_flag=FALSE;
PRINT(m_num);
}
}
一旦按下OnButton1进入递归,界面和OnButton2均无法操作,试过在onbutton1按下是创建一个线程把PRINT放到线程中,但老是出错...小弟对线程不是很熟,请高人指点线程声明放哪?定义放哪?最好能提供点代码!
...全文
76 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhigang34 2008-11-01
  • 打赏
  • 举报
回复

UINT ThreadPrint(LPVOID pParam)
{
CTestDlg* Dlg = (CTestDlg*)pParam;
Dlg->PRINT(Dlg->m_num);
return 0;
}

void CTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
m_flag=TRUE;
m_num=30;
AfxBeginThread(ThreadPrint, this);
}

zzultc 2008-11-01
  • 打赏
  • 举报
回复
首先,线程函数不能是类函数,只能是全局函数或者类的静态函数,你需要先编写一个。
其次,最好自定义一个消息处理函数,用来接收工作线程完工后的通知,然后需要主线程来完成界面的显示,工作线程不宜直接访问界面元素。
代码网上找一个,改造一下即可。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧