MFC中多线程总结

前言

对于写MFC界面来说,如果某个消息映射函数流程执行时间太长,有太多的Sleep()和 While(1)会导致线程时间过长,MFC界面卡死,因此需要学会用多线程

思路

  1. 创建流程
  2. 创建线程调用的函数
  3. 结束线程

第一步:创建线程

CWinThread *m_pThread;
m_pThread=nullptr;
m_pThread=AfxBeginThread(LoadNlpDict,this);//LoadNlpDict是调用的函数

第二步:线程调用的函数:
此函数必须是个静态或者是不属于该类的函数

UINT LoadNlpDict(LPVOID lpParam);

关于创建线程:

CWinThread *MyThread = AfxBeginThread(MyFunction,pParam,THREAD_PRIORITY_NORMAL,0,0,NULL);
//MyThread是定义的线程指针
//MyFunction是调用函数
//pParam调用函数内LPVOID参数,作为传线程参数
//THREAD_PRIORITY_NORMAL是线程优先级,一般置0,和主线程一致
//第一个0代表和主线程一样的栈
//第二个0代表创建线程后就开始运行
//NULL和主线程一样安全

现成的等待,挂起与唤醒

MyThread->SuspendThread();//让线程等待!
MyThread->ResumeThread();//唤醒暂停的线程!

查看线程状态

DWORD code;
GetExitCodeThread(MyThread->m_hThread,&code);
if(code==STILL_ACTIVE)
{
  //线程仍在执行
}
else
{
  //线程停止执行
}

结束线程(强行结束)

TerminateThread(MyThread->m_hThread,0);

注意:线程函数可以放在cpp文件内
前加static变成全局函数(不一定放在C*****cpp中)

线程指针要放在界面类的protect中
CWinThread *mythread;
但线程函数可以单独拿出来
在头文件中声明
UNIT tetthread(LPVOID pParam)
在cpp文件内定义(不加static)

创建线程最好用:

AfxBeginThread(tetthread,this);

这样线程函数中pParam可以不为空指针

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手写不期而遇

感谢你的打赏,也欢迎一起学习

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值