工控编程吧
标题: 上位机MFC如何创建Worker线程 [打印本页]
作者: qq263946146 时间: 2019-8-4 09:50
标题: 上位机MFC如何创建Worker线程
程序刚创建时,默认会创建一个主线程,也叫界面线程。
在处理复杂计算时,界面 线程会卡死。
里就可以创建工作线程避免这种情况。
如何创建Worker线程?
可以通过函数AfxBeginThread来实现。
例如例程:
void CDemoDlg::OnBeginThread()
{
m_ThreadParam.hWnd = m_hWnd;
//启动线程,初始为挂起状态
AfxBeginThread(ThreadProc, &m_ThreadParam);
}
函数第一个参数传递的是线程函数ThreadProc。
- UINT ThreadProc(LPVOID pParam)
- {
- //线程参数
- THREAD_PARAM* pThreadParam = (THREAD_PARAM*)pParam;
- for (int n = 0; n < 10; n++)
- {
- Sleep(100);
- pThreadParam->nData++;
- //向主线程窗口发送消息
- ::PostMessage(pThreadParam->hWnd, WM_THREADMSG, 0, 0);
- }
- return 0;
- }
复制代码 THREAD_PARAM为自定义结构体
typedef struct THREAD_PARAM
{
HWND hWnd;
int nData;
}_THREAD_PARAM;
WM_THREADMSG为自定义消息
#define WM_THREADMSG WM_USER+1
此消息关联有一消息处理函数
ON_MESSAGE(WM_THREADMSG, OnMsgFunc)
- LRESULT CDemoDlg::OnMsgFunc()
- {
- SetDlgItemInt(IDC_DATA, m_ThreadParam.nData);
- return 1;
- }
复制代码 我们可以下载下面的例程学习,界面如下。
点过按钮后,会启动一线程,线程内执行数值的叠加并显示在编辑框中。
(, 下载次数: 2)