您的位置:首页 > 其它

[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的实例子在运行,那么就会输出这句话

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: