MFC对话框程序设计笔记

一、多线程设计

1、线程创建

HANDLE m_hThreadControl;

m_hThreadControl = ::CreateThread(NULL, 0, ThreadControl, (LPVOID)this, 0 ,0);

注:线程函数是回调函数,因此必须是静态函数。

m_hThreadControl用来保存线程句柄。


2、线程函数定义

DWORD WINAPI 类名::ThreadControl(LPVOID lpData)

{

类名 *This = reinterpret_cast<类名 *>(lpData);

}

注:This 是传过来的对象指针,必须经过强制转换才能使用;

WINAPI #define WINAPI__stdcall 定义了函数参数入栈的顺序。


3、线程终止

其中用线程函数的return返回, 而终止线程是最安全的, 

在线程函数return返回后, 会清理函数内申请的类对象。

注:不要使用ExitThread()函数,会造成内存泄露。


4、线程数据传输

遇到问题:

在线程外可以正常获取图像指针,但在线程里通过完全相同的

方式却无法正常获取。

解决途径:

可以在将在线程外正常获取的图像指针单独用一个成员变量保存起来,在

线程中直接调用该变量就可以了,不需要再重新去获取。

问题关键:

AfxGetMainWnd()函数获取的是当前线程的窗口指针,如果在主线程里调用,

则返回主线程的窗口指针,如果是在工作线程里调用,则返回工作线程的窗口指针。

这个函数在线程中使用是有问题的,应使用AfxGetApp()->GetMainWnd()。 


5、线程互斥

有时候为了线程函数中某些函数的不间断执行,需要用到互斥锁。

比如:

HANDLE hMutex = NULL;

WaitForSingleObj

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天上人间555

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值