摘要:
转载自:http://blog.csdn.net/morewindows/article/details/7577591代码:#include #include #include using namespace std;CRITICAL_SECTION g_cs;HANDLE g_hPoolEmpty, g_hPoolFull;int g_nNumProduct;//表示缓存区的产品数量UINT WINAPI Product(PVOID pNum){ WaitForSingleObject(g_hPoolEmpty, INFINITE); //当获得信号量时,信号量的计数减1,表示有一个线程使 阅读全文
摘要:
转载自:http://blog.csdn.net/morewindows/article/details/7481609步骤: 1、CreateSemaphore,创建信号量 2、WaitForSingleObject,获得信号量,使信息量减少 3、ReleaseSemaphore,增加当前信号量的资源计数,表示有多少个线程正在运行,使信号量增加。对信号量的个人理解: 1、用来计数 2、用来同步 3、将ReleaseSemaphore放在一个线程的开头 4、信号量与事件内核对象有相同的同步功能 5、由此可以更能加深对互斥量的认识,它能够解决“遗弃”问题,说明了互斥量的强大。代码... 阅读全文
摘要:
转载自:http://blog.csdn.net/morewindows/article/details/7470936步骤: 1、CreateMutex,创建互斥量 2、用WaitForSingleObject,获得互斥量 3、ReleaseMutex,当用完互斥量后,就释放。其实就是将其内核记录的线程ID变为0对互斥量的个人理解: 1、互斥量与临界区的功能是一样的。 2、互斥量是一个内核对象,因为是一个内核对象,所以能被更多的线程、进程所共享 3、互斥量能够很好地处理“遗弃”问题,避免让其它线程、进程,进入“忙等”状态。 4、临界区只是一个用户模式下的同步对象。 5、互斥量... 阅读全文
摘要:
部分转载自:http://blog.csdn.net/morewindows/article/details/7445233步骤: 1、CreateEvent,创建一个事件内核对象。 2、SetEvent,将一个事件内核对象设为触发状态。而WaitForSingleObject函数就是等待一个事件被触发后,才继续执行。其实就相当于一个通电开关,按下了,才通电,通电了,才能继续执行。 3、ResetEvent,将一个事件内核对象设为未触发状态。 4、CloseHandle,关闭内核对象。事件内核对象的个人理解: 1、事件对象可以分为2种,一种为自动重置事件,别一种为手动重置事件。 ... 阅读全文
摘要:
转载自:http://blog.csdn.net/morewindows/article/details/7442639步骤: 1、创建一个CRITICAL_SECTION类型的变量,放在一个可以让所有的线程都可以访问的地方。 2、InitializeCriticalSection,初始化该变量 3、EnterCriticalSection,进入该临界区 4、LeaveCriticalSection,离开该临界区 5、DeleteCriticalSection,删除该临界区临界区的个人理解: 1、进入到临界区的代码,不能被其它线程给中断。也就是该段代码是以一种类似原子操作的方法来执... 阅读全文
摘要:
转载自:http://hi.baidu.com/lieyu063/item/351c75d4fb6f94cd1a72b4a5(1) _stdcall _stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈。WIN32 Api都采用_stdcall调用方式,按C编译方式,_stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数。(2)_cdecl _cdecl是C/C++的缺省调用方式,参数采用从右到左的压栈方式,传送参数的内存栈由调用者维护。_cedcl约定的函数只能被C/C++调用,每一个调用它的函数都包含清空堆.. 阅读全文
摘要:
阅读全文