MFC学习笔记-线程
来源:互联网 发布:vr软件看不了 编辑:程序博客网 时间:2024/06/06 01:37
1,Timer的使用
1)选择类向导(Class wizard),点击消息(Message),选择WM_TIMER双击,应用退出
2)SetTimer函数
//参数1,timer编号//参数2,timer的扫描周期//参数3,timer回调函数SetTimer(1, 200, NULL);
2,Thread
1),创建线程
方法1:系统API函数
CreateThread函数
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpsa,DWORD
cbStack,LPTHREAD_START_ROUTINE lpStartAddr,LPVOID lpvThreadParam,DWORD fdwCreate, LPDWORD lplDThread)
参数:
lpsa = 线程安全属性,可以为NULL
cbStack = 线程栈的最大大小,该参数可以忽略
lpStartAddr=线程函数
lpvThreadParam=向线程函数创建的参数
fdwCreate=线程创建标记(此值=CREATE_SUSPENDED,线程创建后即被挂起,此值=STACK_SIZE_PARAM_IS_A_RESERVATION表示cbStack 参数将不被忽略,cbStack 为线程栈的最大大小)
lplDThread=线程的指针
返回值:函数执行成功,返回线程句柄,否则返回NULL
//.....{ HANDLE m_Thread=CreateThread(NULL,0,ThreadFun,this,0,NULL);}//......DWORD _stdcall ThreadFun(LPVOID lpParam){ //.....线程执行,线程函数必须声明为静态函数(类内部)或者全局函数}//......//头文件声明//static DWORD _stdcall ThreadFun(LPVOID lpParam);
1-1),挂起线程
DWORD SuspendThread(HANDLE hThread)
参数:
hThread=线程句柄
if (m_Thread) SuspendThread(m_Thread);
1-2),重新启动挂起的线程
DWORD ResumeThread(HANDLE hThread)
参数:
hThread=线程句柄
if(m_Thread) ResumeThread(m_Thread);
1-3),结束当前线程
VOID ExitThread(DWORD dwExitCode)
参数:
dwExitCode=线程退出代码
1-4),终止当前线程
BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode)
参数:
hThread=线程句柄
dwExitCode=线程退出代码
if(m_Thread) TerminateThread(m_Thread,0);
方法2:C++函数(需要包含process.h头文件)<没有测试>
_beginthreadex函数
uintptr_t _beginthreadex(void * security,unsigned stack_size ,unsigned (start_address)(void ),void * arglist,unsigned initflag,unsigned *thrdaddr)
security=线程安全属性信息,为NULL表示线程句柄不被子进程继承
stack_size=线程栈的大小
start_address=线程函数
arglist=线程函数的参数
initflag=线程初始化标记,值=0,则立即被执行,值=CREATE_SUSPENDED,线程创建后被挂起
thrdaddr=线程ID,整型指针
方法3:MFC函数
AfxBeginThread函数
CWinThread* AFXAPI AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0,
DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
参数:
pfnThreadProc=线程函数指针(原型UINT ThreadProc(LPVIOD pThreadParam))
pParam=线程函数的参数
nPriority =线程的优先级
nStackSize =线程栈的大小
dwCreateFlags =线程创建标记
lpSecurityAttrs =线程安全属性
3,死循环线程关闭
3-1,添加一个事件变量
BOOL m_bExit;CEvent m_EventExit;
3-2,在线程函数中添加处理代码
while(true){ if(m_bExit) { break; } //...............}m_EventExit.SetEvent();
3-3,在退出函数中,等待线程退出
if (WAIT_OBJECT_0 == WaitForSingleObject(m_EventThreadExited, INFINITE)){ //删除线程}
- MFC 线程学习笔记
- MFC学习笔记-线程
- MFC学习笔记 线程之信号量
- MFC 线程学习笔记之临界区
- MFC 线程学习笔记之定时器
- MFC学习笔记——线程中控制窗口内容 .
- 深入浅出MFC学习笔记,进程与线程简介
- MFC之多线程学习
- MFC rtti 学习笔记
- 《深入浅出mfc》学习笔记
- MFC学习笔记
- MFC学习笔记一
- MFC学习笔记
- MFC学习笔记
- VC/MFC学习笔记
- 《深入浅出mfc》学习笔记
- MFC学习笔记基础
- MFC学习笔记(1)
- Android Studio教程从入门到精通
- C# 实现AOP 的几种常见方式
- 技术文章 | 如何构建AI驱动型智能服务?
- 一个简洁的高自定义的H5播放器
- 策略模式
- MFC学习笔记-线程
- Oracle快速入门(1)——ORACLE数据库简介
- linux 定时删除文件
- 09-Thrift高级3
- scala开发环境搭建(scala学习一)
- DllMain和多线程死锁
- JfreeChart相关开发:柱形图,饼图,折线图
- C语言笔记——(i++)和(++i)的区别
- 使用inet_ntop替换inet_ntoa进行网络地址到字符地址转换