C++11、MFC、Qt多线程整理

本周主要研究了多线程编程,包括WIN32 API的多线程编程,MFC框架多线程编程,QT框架中的多线程编程以及C++11中的基于Thread类的多线程。
(1)WIN 32 API编程
首先引入头文件<windows.h>,然后进行线程函数定义:DWORD WINAPI funThread (LPVOID  lpParameter); 调用CreateThread函数来启动线程,其中CreateThread有好多参数,参数如下:
CreateThread(
    _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,//线程安全属性,一般为null
    _In_ SIZE_T dwStackSize,//为线程分配的堆栈大小,一般设为0
    _In_ LPTHREAD_START_ROUTINE lpStartAddress,//线程启动函数,函数名,即funThread
    _In_opt_ __drv_aliasesMem LPVOID lpParameter,//为线程传递的参数
    _In_ DWORD dwCreationFlags,// 指定额外的标志来控制线程的创建,一般为0
    _Out_opt_ LPDWORD lpThreadId // 返回线程的ID,传为0表示不需要ID
    );
参数的传递:在主线程中传入type*类型参数给子线程,在子线程函数中进行接收,接收的形式为:type* n = (type*)lpParameter;
(2)MFC界面程序中的多线程
首先声明线程函数UINT MyThreadFunction( LPVOID pParam ); 然后在CWinThread* AFXAPI AfxBeginThread(
AFX_THREADPROC pfnThreadProc, //调用的线程函数地址(回调函数)
LPVOID pParam,//给线程函数传递的参数
int nPriority = THREAD_PRIORITY_NORMAL, //线程的优先级
UINT nStackSize = 0,//线程堆栈大小
DWORD dwCreateFlags = 0, //现成的标识
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL); //线程的安全属性
中进行创建线程。
MFC中常用实现线程同步的方法:
a互斥量:
  HANDLE hmutex;
Hmutex = CreateMutex(NULL,FALSE,NULL);

WaitForSingleObject(hmutex,INFINITE);
//需要同步的代码;
ReleaseMutex(hmutex);
b临界区:
  CRITCAL_SECTION section;
  InitializeCriticalSection(&section);

  EnterCriticalSection(&section);
  //需要同步的代码;
  LeaveCriticalSection(&section);
c事件对象:
  HANDLE hevent;
  Hevent=CreateEvent(NULL,FALSE,FALSE,NULL);
  SetEvent(hevent);

  WaitForSingleObject(hevent,INFINITE);
  ResetEvent(hevent);
//需要同步的代码
  SetEvent(hevent);
(3)QT多线程编程
方法1:继承Qthread类,然后重写run()方法。run()中的内容都会在子线程中执行。
方法2:定义工作线程Work类继承Qobject类,然后用MoveToThread()函数;定义一个Qthread qthread,然后Work *pWork;pWork = new Work(); pWork->moveToThread(&qthread);
(4)C++11中多线程的方法
  定义线程函数void funThread();
#include<Thread>头文件;
Thread t(funThread);
t.join()或者t.detach()来启动线程。
互斥量mutex类进行线程同步:
#include<mutex>   
mutex mu; 
mu.lock();
//需要同步的代码;
mu.unlock();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我啥都会

如果觉得对您有帮助,打赏一下吧

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

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

打赏作者

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

抵扣说明:

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

余额充值