滴水2.24 互斥体 内核对象
1
功能说明:
等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止.
hHandle:内核对象句柄,可以是进程也可以是线程.
dwMilliseconds:等待时间,单位是毫秒 INFINITE(-1)一直等待
特别说明:
WaitForSingleObject
#include<stdio.h>
#include<Windows.h>
int sum = 0;
CRITICAL_SECTION cs;
DWORD WINAPI ThreadProc(
LPVOID lpParameter // thread data
)
{
int i = 0;
while (i < 10)
{
Sleep(500);
i++;
}
return 0;
}
int main()
{
InitializeCriticalSection(&cs);
//创建一个新的线程
HANDLE hThread = ::CreateThread(NULL, 0, ThreadProc,
NULL, 0, NULL);
//如果不在其他的地方引用它 关闭句柄
DWORD dwCode = ::WaitForSingleObject(hThread, INFINITE);
MessageBox(0, 0, 0, 0);
return 0;
}
会清理掉高2G内存的数据
如果重复写等待函数 可能会造成卡死 因为 对特定的内核对象 该等待函数可能会改变通知状态
2.
代码演示
#include<stdio.h>
#include<Windows.h>
int sum = 0;
CRITICAL_SECTION cs;
DWORD WINAPI ThreadProc(
LPVOID lpParameter // thread data
)
{
int i = 0;
while (i < 10)
{
Sleep(500);
i++;
}
return 0;
}
DWORD WINAPI ThreadProc2(
LPVOID lpParameter // thread data
)
{
int i = 0;
while (i < 10)
{
Sleep(500);
i++;
}
return 0;
}
int main()
{
InitializeCriticalSection(&cs);
HANDLE hThread[2];
//创建一个新的线程
hThread[0]= ::CreateThread(NULL, 0, ThreadProc,
NULL, 0, NULL);
hThread[1] = ::CreateThread(NULL, 0, ThreadProc2,
NULL, 0, NULL);
//如果不在其他的地方引用它 关闭句柄
DWORD dwCode = ::WaitForMultipleObjects(2, hThread,TRUE,-1);
//TRUE 所有线程变成 已通知 放权
//flase 但凡有一个通知 就放权
MessageBox(0, 0, 0, 0);
return 0;
}
配合线程结束使用
防止内核对象泄露
3.内核对象 互斥体
临界区--也是线程的互斥
CreateMutex 互斥体的创建
CreateMutex是一个计算机函数,作用是找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。
点击查看代码
HANDLE g_hMutex = CreateMutex(NULL,FALSE, "XYZ");
//创建
//换进程 打开
HANDLE g_hMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE, "XYZ");
ReleaseMutex(g_hMutex);
跨进程通信
因为是内核程序 在高两G内存 所以可以跨进程访问
4.什么是内核对象
2、事件内核对象的创建
///HANDLE g_hEvent = CreateEvent(NULL, TRUE, FALSE, "XYZ");
HANDLE g_hMutex = CreateMutex(NULL,FALSE, "XYZ");
3.内核对象的获取
HANDLE g_hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "XYZ");
//这里的 g_hMutex g_hEvent都是指针的指针 为了安全考虑
4、内核对象的销毁
BOOL CloseHandle(HANDLE hobj);
(1)、当没有其他程序引用时,系统会销毁内核对象(使用数量).
(2)、内核对象的生命周期,可能比创建它的对象要长.
实验:CloseHandle()/进程结束 查看引用内核对象 的数量 为0才结束
本文来自博客园,作者:逆向狗,转载请注明原文链接:https://www.cnblogs.com/Agtw/p/17153209.html