文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>MFC线程创建----工作线程

MFC线程创建----工作线程

时间:2010-07-15  来源:chen_yu_hust

        Win32线程有两种,一是工作线程,就是只有一个线程函数的线程;二是UI线程,就是可以有用户界面的线程。两种线程在本质上一样的,因为windows在创建线程时都是使用的CreateThread函数,在C++中又把它封装成了_beginthread(ex),并为新线程维护了一个消息队列。

    

在MFC中,使用函数AfxBeginThread创建线程,该函数有两个版本,

CWinThread* AfxBeginThread(

AFX_THREADPROC pfnThreadProc,

LPVOID pParam,

int nPriority = THREAD_PRIORITY_NORMAL,

UINT nStackSize = 0,

DWORD dwCreateFlags = 0,

LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );

CWinThread* AfxBeginThread(

CRuntimeClass* pThreadClass,

int nPriority = THREAD_PRIORITY_NORMAL,

UINT nStackSize = 0,

DWORD dwCreateFlags = 0,

LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );

 

前者用于创建工作线程,后者用于创建UI线程.

 

工作线程:

 

在VC下创建一下win32 console 工程,并添加如下代码:

 

#include <process.h>
#include <afxwin.h>
UINT WINAPI MyThreadProc(LPVOID pParam)
{
 MessageBox(NULL,"MyThreadProc","ThreadTour",MB_OK);
 return 1;
}

int main(int argc, char *argv[])
{
 CWinThread *pThread = AfxBeginThread((AFX_THREADPROC)MyThreadProc,NULL);
 WaitForSingleObject(pThread->m_hThread,INFINITE);
 return 1;
}

 

编辑出下如下错误:

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex

解决方法:

这是因为MFC要使用多线程时库, 需要更改设置:


[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Code Generation,
再在Use run-time library中选择Debug Multithreaded或者multithreaded

 

其中
Single-Threaded                单线程静态链接库(release版本)
Multithreaded                  多线程静态链接库(release版本)
multithreaded DLL              多线程动态链接库(release版本) 
Debug Single-Threaded          单线程静态链接库(debug版本)
Debug Multithreaded            多线程静态链接库(debug版本)
Debug Multithreaded DLL        多线程动态链接库(debug版本)

单线程: 不需要多线程调用时, 多用在DOS环境下
多线程: 可以并发运行 
静态库: 直接将库与程序Link, 可以脱离MFC库运行
动态库: 需要相应的DLL动态库, 程序才能运行
release版本: 正式发布时使用
debug版本: 调试阶段使用    

 

问题即解决! 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载