工作线程AfxBeginThread的使用

来源:互联网 发布:内网动态域名解析 知乎 编辑:程序博客网 时间:2024/06/05 17:29

工作线程通常用来执行一些后台任务,如:数据计算、后台杀毒等等。因为不需要创建窗口和处理用户消息,编写比较容易,在程序中只要调用AfxBeginThread函数就可以创建并启动一个工作线程了。

AfxBeginThread的原型如下:

CWinThread *AfxBeginThread( 
    AFX_THREADPROC pfnThreadProc,                           //指向控制函数的地址 
    LPVOID pParam,                                                     //指向传递给控制函数的参数 
    int nPriority /* = THREAD_PRIORITY_NORMAL */,     //指定线程的优先级 
    UINT nStackSize /* = 0 */,                                      //指定堆栈大小 
    DWORD dwCreateFlags /* = 0 */,                            //创建标识 
    LPSECURITY_ATTRIBUTES lpSecurityAttrs /* = NULL */    //安全属性 
)

从上面参数可以看到,只有前两个参数是必须的,其余参数都使用默认的话,就可创建了一个具有普通优先级别的线程。

示例:编写一个应用程序,当在程序窗口按下鼠标左键,启动一个线程,该线程可以在屏幕上显示一个信息框。
1.新建单文档程序;
2.在视图类CPP文件添加一个准备作为线程的函数:

UINT MessageThread(LPVOID pParam) 

    LPTSTR    pMessage = (LPTSTR)pParam; 
    CWnd *pMainWnd = AfxGetMainWnd(); 
    ::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread Message"), MB_OK); 
    return 0
}

3.在视图类的鼠标左键消息响应函数中创建和启动线程:

void CThreadTestView::OnLButtonDown(UINT nFlags, CPoint point) 

    AfxBeginThread(MessageThread, _T("Greetings from your thread!")); 
    CView::OnLButtonDown(nFlags, point); 
}

程序运行结果:

 

原创粉丝点击