win 32多线程程序设计读书笔记
来源:互联网 发布:数据采集系统电路图 编辑:程序博客网 时间:2024/05/16 06:59
一直不是很熟悉windows下的编程,借着学习侯捷老师翻译的《win32 多线程程序设计》来完成操作系统的作业。
1.今天学到的比较重要的概念是核心对象(一下大部分话出自该书):
核心对象可以有多个拥有者,拥有者还可以是不同的进程,核心对象保持一个引用计数,记录有多少handles 对应到此对象,记录那个线程或进程是拥有者。当调用CreateHandle 之类会返回handle 的函数 ,引用计数+1,调用 CloseHandle 函数时,引用计数-1,一旦引用计数=0 ,对象被自动摧毁
Win32 核心对象:
进程,线程,文件,事件,信号量,互斥器,管道。
2.还学到了几个函数:
1. BOOL CloseHandle(HANDLE hObject )----用来释放核心对象
hObject -----代表一个已经打开的核心对象handle,比如说线程核心对象(现在只学了线程!!),如果成功 ,返回TRUE,否则返回FALSE.
2. BOOL GetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode);
hThread------由CreateHandle 传回的handle
lpExitCode-------指向一个DWORD, 用以接受结束代码
1.今天学到的比较重要的概念是核心对象(一下大部分话出自该书):
核心对象可以有多个拥有者,拥有者还可以是不同的进程,核心对象保持一个引用计数,记录有多少handles 对应到此对象,记录那个线程或进程是拥有者。当调用CreateHandle 之类会返回handle 的函数 ,引用计数+1,调用 CloseHandle 函数时,引用计数-1,一旦引用计数=0 ,对象被自动摧毁
Win32 核心对象:
进程,线程,文件,事件,信号量,互斥器,管道。
2.还学到了几个函数:
1. BOOL CloseHandle(HANDLE hObject )----用来释放核心对象
hObject -----代表一个已经打开的核心对象handle,比如说线程核心对象(现在只学了线程!!),如果成功 ,返回TRUE,否则返回FALSE.
2. BOOL GetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode);
hThread------由CreateHandle 传回的handle
lpExitCode-------指向一个DWORD, 用以接受结束代码
作用:通过检查结束代码来判断一个线程是否已经结束,如果没有结束 lpExitCode的值时STILL_ACTIVE
实例代码:
#include <windows.h>#include <stdio.h>#include <iostream>DWORD WINAPI ThreadFunc(LPVOID);int main(){HANDLE hThread1;HANDLE hThread2;DWORD threadID;DWORD ExitCode1;DWORD ExitCode2;hThread1 = CreateThread(NULL,0,ThreadFunc,(LPVOID)1,0,&threadID);if (hThread1)printf("thread 1 is running!\n");hThread2 = CreateThread(NULL,0,ThreadFunc,(LPVOID)2,0,&threadID);if (hThread2)printf("thread 2 is running!\n");for (;;){printf("press any key to exit..\n");getchar();GetExitCodeThread(hThread1, &ExitCode1);GetExitCodeThread(hThread2, &ExitCode2);//std::cout << GetExitCodeThread(hThread1, &ExitCode1)<<std::endl;if (ExitCode1 == STILL_ACTIVE){printf("thread 1 is still running !\n");}if ( ExitCode2 == STILL_ACTIVE){printf("thread 2 is still running!\n");}if (ExitCode1 != STILL_ACTIVE&& ExitCode2 != STILL_ACTIVE){break;}}CloseHandle(hThread1);CloseHandle(hThread2);std::cout << "Thread 1 return " << ExitCode1 <<std::endl;std::cout << "Thread 2 return " << ExitCode2 << std::endl;//Sleep(2000);return EXIT_SUCCESS;}DWORD WINAPI ThreadFunc(LPVOID p){//printf("%d%d%d%d%d%d%d!\n",p,p,p,p,p,p,p);Sleep((DWORD)p * 10000);return 0;}
0 0
- win 32多线程程序设计读书笔记
- 读书笔记:多线程程序设计要点
- Win32多线程程序设计读书笔记
- 《Win32 多线程程序设计》读书笔记
- <<Win32多线程程序设计>>读书笔记
- 《Win32多线程程序设计》读书笔记
- Win 32 多线程程序设计学习笔记之一:基本概念
- Win 32 多线程程序设计学习笔记之二:线程
- Win 32 多线程程序设计学习笔记之五:终止线程
- Win 32 多线程程序设计学习笔记之三:*WaitFor*Object函数
- Win 32 多线程程序设计学习笔记之四:同步控制(Synchronization)
- Win 32 多线程程序设计学习笔记之六:异步I/O(Overlapped I/O)
- Win32 多线程程序设计之读书笔记chap1-06
- 《Win32多线程程序设计》读书笔记(1)
- 《Win32多线程程序设计》读书笔记(2)
- 《Win32多线程程序设计》读书笔记之内核对象
- 《Win32多线程程序设计》读书笔记(一)
- win 32 多线程 2 GetExltCodeThread
- 有名管道+多进程最基本的并发式的通信
- Mysql几种索引类型的区别及适用情况
- 适应于一些同事的要求,只能默默的开启博客之路了!
- string用法
- 关于并发与并行
- win 32多线程程序设计读书笔记
- maven私服上传jar
- eclipse搭建ssh框架(三)
- 云数据库 Redis 版
- 归并排序求逆序数
- XML做带边框的背景drawable
- 第一个Spring Boot程序
- 网络游戏的粗略模块划分
- Newtonsoft.Json 序列化和反序列化