码迷,mamicode.com
首页 > 编程语言 > 详细

MFC第三节-多线程

时间:2014-07-06 17:56:56      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   strong   文件   

一、程序,进程,线程

程序是指令的集合,以文件形式储存在磁盘上。一个程序可以对应多个进程,一个进程代表一个实例。

进程由管理进程的内核对象、地址空间组成。内核对象存放关于进程的统计信息,地址空间包含可执行模块、DLL模块和堆、栈。进程不执行任何东西,它是线程的容器,每个进程至少有一个线程。当创建一个进程时,操作系统自动创建一个线程—主线程。每个进程有4GB的地址空间,进程之间相互独立。

线程由线程的内核对象和线程栈组成。线程只有一个内核对象和栈,只有很少的内存。同一个进程的线程能共享进程的数据。

二、创建新线程

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, //安全性结构
DWORD dwStackSize,//初始栈大小
LPTHREAD_START_ROUTINE lpStartAddress,//新线程函数入口地址
LPVOID lpParameter,//参数
DWORD dwCreationFlags,//CREATE_SUSPENDED或0
LPDWORD lpThreadID//线程ID
);

注:用Sleep(……)可以使线程暂停自己的运行

三、创建互斥对象

互斥对象包括一个线程ID,一个计数器,一个使用数量。

可以创建匿名互斥对象、命名互斥对象。

HANDLE CreateMutex(……)

BOOL ReleaseMutex(HANDLE hMutex)

DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMillionseconds);

注:线程同步:可用匿名互斥对象

保证只有一个实例运行:命名互斥对象。(问题:进程之间相互独立,为什么可以用互斥对象?)

四、MFC中加载套接字库

BOOL AfxSocketInit(WSADATA *lpwsaData=NULL)

对MFC程序,第一个要包含的头文件就是<stdafx.h>

五、在MFC中,线程函数不能是普通的成员函数。"如果要调用线程函数来启动某个线程的话,应该不需要产生某个对象就可以调用"。因此可以把它设置为类的静态成员函数。

如:

static DWORD WINAPI RecvProc(LPVOID lpParameter);

注意:在不能使用全局函数和全局变量时,可以采用静态成员函数和静态成员变量。它们不输入类的对象,而是类本身。

六、MFC的消息映射机制

一个MFC消息响应函数在程序中有三处相关信息:

1. 函数原型(h文件) afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

2. 函数实现(c文件)void OnLButtonDown(UINT nFlags, CPoint point);

3. 用来关联消息和消息相应函数的宏 ON_WM_LBUTTONDOWN(XX,XX)

七、自定义消息

向消息队列加入消息:::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf)

定义消息的值:#define WM_RECVDATA WM_USER+1;

在程序的三处中加相应语句。

MFC第三节-多线程,布布扣,bubuko.com

MFC第三节-多线程

标签:style   blog   color   使用   strong   文件   

原文地址:http://www.cnblogs.com/aipu/p/3825133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!