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版本: 调试阶段使用
问题即解决
- Win32 线程
- Win32线程
- WIN32线程编程
- win32线程池代码
- Win32的线程模型
- win32线程池代码
- Win32 线程通信
- win32线程池代码
- win32线程简单封装
- win32 API 线程编程
- win32线程学习
- win32 线程池
- win32汇编 线程
- Win32线程同步
- win32 线程优先级
- win32下线程封装
- win32 MFC 线程
- Win32 - 线程同步
- Hue+MapReduce Job配置及遇到的问题
- Invalidate
- 《剑指Offer》学习笔记--面试题57:删除链表中重复的结点
- coocs2dx-lua在XCode开发时lua和资源热更新问题解决办法
- VC常用数据类型使用转换
- Win32线程
- 遍历 Valid Palindrome
- spring+mybatis的优缺点
- VC中句柄、指针、ID之间的转换
- Crossing Rivers
- c++_操作符重载
- 第11周 项目一-储存班长信息的学生类
- VC控件坐标与屏幕坐标
- 百度全面开放HTTPS之我见