Win32线程

来源:互联网 发布:淘宝成都客户信息购买 编辑:程序博客网 时间:2024/05/16 14:17

  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: unresolvedexternal 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版本)
multithreadedDLL             多线程动态链接库(release版本) 
Debug Single-Threaded          单线程静态链接库(debug版本)
DebugMultithreaded           多线程静态链接库(debug版本)
Debug Multithreaded DLL        多线程动态链接库(debug版本)

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

 

问题即解决

0 0
原创粉丝点击