MFC多线程编程

MFC多线程开发

线程创建函数

HANDLE CreateThread(

LPSECURITY_ATTRIBUTESlpThreadAttribute,  //指向SECURITY_ATTRIBUTES结构体的指针

DWORD dwStackSize,                       //设置线程初始栈的大小(页面大小的整数//倍)默认为调用该函数的线程相同的栈空间大小

LPTHREAD_START_ROUTINElpStartAddress,   //新线程入口函数的指针

LPVOID lpParameter,                      //命令行参数

DWORD dwCreationFlags,                   //设置控制线程创建后状态的标记

LPDWORD lpThreadId                       //接收线程ID

);

CloseHandle()

当不需要线程句柄时,将其关闭,让这个线程内核对象的引用减1,当引用计数为0时,系统释放该线程内核对象

线程由线程内核对象和线程栈组成,在创建它的进程环境中运行,可随意访问

进程内核对象,进程地址空间

 

DWORD WINAPI ThreadProc(LPVOID lpParameter);

在程序定义一个函数作为新线程的入口函数。函数名任意,但函数类型声明格式固定

 

Void Sleep(DWORD dwMilliseconds);

线程同步

利用互斥对象实现线程同步

HANDLE CreateMutex(     //mutex互斥内核对象,当前拥有互斥对象的线程ID

                                           //和指明拥有的次数的计数器

LPSECURITY_ATTRIBUTESlpMutexAttributes,

BOOL bInitialOwner,                       //指定互斥对象初始的拥有者

LPCTSTR lpName                           //名称

)

BOOL ReleaseMutex(HANDLE hMutex);   //释放该对象的所有权,使其处于已通知状态实为//递减计数器的值

DWORD WaitForSingleObject(HANDLEhHandle,DWORD dwMilliseconds);

主动请求共享对象的使用权,dwmiliseconds为等待时间指定对象为有信号状态返回

返回值 WAIT_OBJECT_0  WAIT_TIMEOUT WAIT_ABANDONED

对于互斥对象,谁拥有谁释放

操作系统一旦发现线程已终止,自动将其拥有的互斥对象的线程ID设为0,计数器归0

保证应用程序只有一个实例(进程吗??)运行

GetLastError()函数  ERROR_ALREADY_EXISTS表明先前已经创建了这个命名的互斥对象

线程的时间片

很久以前,接触一个项目,看到一个while(1)死循环,但又发现程序经常跳出while去执行另外一段程序,甚为疑虑。其实,在多线程模式下,这是可能的,下面的程序就不会一直陷入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值