概述
1:在定时器中创建一个线程
case TIMER1:
if (m_SpiManage.IsSpiConnect())
{
AfxBeginThread(WORK_ReadSAWtag, NULL);
//ReadSAWtag();
}
2:创建线程函数 (放在ReadSAWtag()函数上面)
/创建的线程函数
/创建的线程函数
UINT WORK_ReadSAWtag(LPVOID pParam)
{
// TODO: 在此添加控件通知处理程序代码
threadInfo *pInfo = (threadInfo*)pParam;
CTryStaticDlg *dlg; //将void类型强制转换成dlg类型
dlg = (CTryStaticDlg *)pdlg;
dlg->ReadSAWtag();
case TIMER1:
if (m_SpiManage.IsSpiConnect())
{
AfxBeginThread(WORK_ReadSAWtag, NULL);
//ReadSAWtag();
}
2:创建线程函数 (放在ReadSAWtag()函数上面)
/创建的线程函数
/创建的线程函数
UINT WORK_ReadSAWtag(LPVOID pParam)
{
// TODO: 在此添加控件通知处理程序代码
threadInfo *pInfo = (threadInfo*)pParam;
CTryStaticDlg *dlg; //将void类型强制转换成dlg类型
dlg = (CTryStaticDlg *)pdlg;
dlg->ReadSAWtag();
::SendMessage(pInfo->hWnd, WM_ReadSAWtag_MSG, 0, -1);
return 0;
}
3.在CTryStaticDlg.h头文件中自定义消息:#define WM_ReadSAWtag_MSG WM_USER + 100
4.在CTryStaticDlg.h头文件中添加消息处理函数的声明
LRESULT OnReadSAWtagMsg(WPARAM wParam, LPARAM lParam);
5. 在CTryStaticDlg类实现文件CTryStaticDlg.cpp中的消息映射表中加入自定义消息映射:
BEGIN_MESSAGE_MAP(CTryStaticDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_ReadSAWtag_MSG, OnReadSAWtagMsg)添加
ON_BN_CLICKED(IDC_BUTTON1, &CTryStaticDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON4, &CTryStaticDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CTryStaticDlg::OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON2, &CTryStaticDlg::OnBnClickedButton2)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON3, &CTryStaticDlg::OnBnClickedButton_Save)
ON_BN_CLICKED(IDC_BUTTON6, &CTryStaticDlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON_ClearAll, &CTryStaticDlg::OnBnClickedButtonClearall)
ON_BN_CLICKED(IDOK, &CTryStaticDlg::OnBnClickedOk)
END_MESSAGE_MAP()
6.在CTryStaticDlg类实现文件CTryStaticDlg.cpp中定义消息响应
LRESULT CTryStaticDlg::OnReadSAWtagMsg(WPARAM wParam, LPARAM lParam)
{
return 0;
}
3.在CTryStaticDlg.h头文件中自定义消息:#define WM_ReadSAWtag_MSG WM_USER + 100
4.在CTryStaticDlg.h头文件中添加消息处理函数的声明
LRESULT OnReadSAWtagMsg(WPARAM wParam, LPARAM lParam);
5. 在CTryStaticDlg类实现文件CTryStaticDlg.cpp中的消息映射表中加入自定义消息映射:
BEGIN_MESSAGE_MAP(CTryStaticDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_ReadSAWtag_MSG, OnReadSAWtagMsg)添加
ON_BN_CLICKED(IDC_BUTTON1, &CTryStaticDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON4, &CTryStaticDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CTryStaticDlg::OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON2, &CTryStaticDlg::OnBnClickedButton2)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON3, &CTryStaticDlg::OnBnClickedButton_Save)
ON_BN_CLICKED(IDC_BUTTON6, &CTryStaticDlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON_ClearAll, &CTryStaticDlg::OnBnClickedButtonClearall)
ON_BN_CLICKED(IDOK, &CTryStaticDlg::OnBnClickedOk)
END_MESSAGE_MAP()
6.在CTryStaticDlg类实现文件CTryStaticDlg.cpp中定义消息响应
LRESULT CTryStaticDlg::OnReadSAWtagMsg(WPARAM wParam, LPARAM lParam)
{
if (wParam == 0 && lParam == -1)
{
//m_stTip.SetWindowText("完成");
//GetDlgItem(IDC_BUTTON_CAL)->EnableWindow(TRUE);
}
return 0;
}
3.备注
1)先申请个全局void类型指针: void *pdlg;
2)在dlg InitDialog中,将该void指针初始化为this:?pdlg= this;
3)在全局函数中加入以下程序
CTryStaticDlg *dlg; //将void类型强制转换成dlg类型
dlg = CTryStaticDlg *)pdlg;
4.可能遇到的问题:因为是用指针访问的类成员中的函数,所以不需要线程有消息返回。
因为是指针访问的类成员中的函数,所以创建的线程不知道是否会冲突,需要调试。
{
//m_stTip.SetWindowText("完成");
//GetDlgItem(IDC_BUTTON_CAL)->EnableWindow(TRUE);
}
return 0;
}
3.备注
1)先申请个全局void类型指针: void *pdlg;
2)在dlg InitDialog中,将该void指针初始化为this:?pdlg= this;
3)在全局函数中加入以下程序
CTryStaticDlg *dlg; //将void类型强制转换成dlg类型
dlg = CTryStaticDlg *)pdlg;
4.可能遇到的问题:因为是用指针访问的类成员中的函数,所以不需要线程有消息返回。
因为是指针访问的类成员中的函数,所以创建的线程不知道是否会冲突,需要调试。
最后
以上就是直率火为你收集整理的MFC中创建工作线程,进行消息传递的全部内容,希望文章能够帮你解决MFC中创建工作线程,进行消息传递所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复