工控编程吧

标题: 上位机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。
  1. UINT ThreadProc(LPVOID pParam)
  2. {
  3.         //线程参数
  4.         THREAD_PARAM* pThreadParam = (THREAD_PARAM*)pParam;
  5.         for (int n = 0; n < 10; n++)
  6.         {
  7.                 Sleep(100);
  8.                 pThreadParam->nData++;
  9.                 //向主线程窗口发送消息
  10.                 ::PostMessage(pThreadParam->hWnd, WM_THREADMSG, 0, 0);
  11.         }
  12.         return 0;
  13. }
复制代码
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)
  1. LRESULT CDemoDlg::OnMsgFunc()
  2. {
  3.         SetDlgItemInt(IDC_DATA, m_ThreadParam.nData);

  4.         return 1;
  5. }
复制代码
我们可以下载下面的例程学习,界面如下。
点过按钮后,会启动一线程,线程内执行数值的叠加并显示在编辑框中。
(, 下载次数: 2)