[MFC学习笔记]--lesson15多线程与聊天室程序的设计
2015-08-20 10:40
281 查看
程序和进程:一个进程是一个程序的实例化,一个程序可以打开多个进程。比如,可以打开多个记事本文件。
进程创建内核对象:操作系统分配的内存块,是一种数据结构,它的成员负责维护该对象的各种信息,内核数据结构的数据只能被内核对象访问,因此应用程序无法在内存中找到这些数据结构并直接改变他们的内容,我们只能通过windows提供的一些函数来对内核对象进行操作
main() 或者WinMain() 函数可以看住主线程的入口地址。
如果是多进程的话,系统每次都要为一个进程分配一个4G的地址空间,而且两个进程之间的切换,是两个地址空间之间的切换。而两个线程之间的切换则是执行环境的改变。
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD
dwStackSize, LPTHREAD_START_ROUTINE
lpStartAddress, LPVOID
lpParameter, DWORD
dwCreationFlags, LPDWORD
lpThreadId);
创建一个线程的函数。第一个参数,指向一个结构体的指针,可以传递一个NULL,使用缺省值。第二个参数,初始栈的大小,page页面,是内存单位,X86大概是4KB,当你保留地址区域的地址时,保留10KB的地址空间,会四舍五入,会让地址空间是4KB 的整数倍。第三个参数,指向一个类型函数指针,这个函数被线程执行,表示线程的起始地址。所创建线程的入口地址,就是第三个参数指定。第四个参数,指定一个单独参数的值,传递给线程。第五个参数,指定一个CREATE_SUSPENDED,线程会暂停,直到调用
ResumeThread() 才会重新执行。而设置为0的话,线程创立,就立马执行。最后一个参数,线程的标识符。
交替运行代码
当hMutex = CreateMutex(NULL,TRUE,NULL);那么在主线程创立,主线程就拥有hMutex,如果主线程不释放hMutex,那么两个子线程都不执行。
WaitForSingleObject(hMutex,INFINITE); 请求互斥对象。
hMutex = CreatMutex(NULL,TRUE,"tickets");
if(hMutex)
{
if(ERROR_ALREDY_EXISTS == GetLastError()){
cout<<"only instance can run!"<<endl;
} //如果检测到有一个名字叫tickets的实例子在运行,那么就会输出这句话
}
相关文章推荐
- 263 Ugly Number
- zlib-1.2.8源码官方下载地址
- 概述PHP命令行shell_exec()使用
- 26 Remove Duplicates from Sorted Array
- HDU-4920 Matrix multiplication
- jquery插件之表格隔行变色并鼠标滑过高亮显示
- oracle标量子查询
- [leetcode] Longest Valid Parentheses
- Number of Digit One
- 数组对象的初始化表达式
- iOS 设置App版本号
- STL map 按key值和按value值排序
- C++ Primer : 第十一章 : 关联容器之关联容器的迭代器和操作
- strut2的核心要重点以及面试常问的问题
- Linux常用shell命令
- topo排序(入度法)(可判断topo排序是否唯一)
- Opencv识别答题卡
- VLC打开.264文件
- 过滤广告(只能发布 [a-zA-z0-9及汉字,;?.]) ,排除其他特殊符号
- 学习javascript设计模式之单例模式