文件内核对象

CreateFile函数可以用来创建和打开磁盘文件,同时可以打开很多其他设备,例如串口、邮件槽服务器、命名管道等等。

文件的读写共享模式:

windows内核初始--3

 

文件指针位置:

调用CreateFile系统会创建一个内核对象管理对文件的操作,其中记录文件的指针,标识文件下一次读取或写入的位置。

通过SetFilePointerEx可以设置或获取当前位置:

windows内核初始--3

 

线程内核对象

组成:一个线程包括仅包括一个线程堆栈和一个线程内核对象

线程堆栈:用于维护线程在执行代码时需要的所有函数参数和局部变量。

线程内核对象:操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息。(此处内核对象专指线程内核对象)

生命周期:线程总是创建于某个进程环境中,其生命周期仅存在于创建它的进程生命周期内。

执行位置:线程在进程的地址空间中执行代码并进行数据操作。从属于同一进程的线程共享进程的地址空间,可以执行一样的代码并对一样的数据进行操作,共享该进程的内核句柄。

 

通过内核对象同步线程

 

1.事件内核对象(Event)

事件包含一个引用计数,一个用来表示事件是自动重置事件还是手动重置事件的布尔值,以及另一个用来表示事件有没有被触发的布尔值。


HANDLE CreateEvent( PSECURITY_ATTRIBUTES psa, BOOL bManualReset,BOOL bInitialState,PCTSTR pszName

 HANDLE OpenEvent( DWORD dwDesiredAccess, BOOL bInherit, PCTSTR pszName)

 BOOL SetEvent(HANDLE hEvent);//触发事件

 BOOL ResetEvent(HANDLE hEvent);//把事件设为未触发状态

BOOL PulseEvent(HANDLE hEvent);//先触发事件后立即恢复到未触发状态

 

2.可等待的计时器内核对象(Waitable Timer)

可以在某个指定的时间触发,或每隔一段时间触发一次。

HANDLE CreateWaitableTimer( PSECURITY_ATTRIBUTES psa, BOOL bManualReset, PCTSTR pszName)

;HANDLE OpenWaitableTimer( DWORD dwDesiredAccess, BOOL bInheritHandle, PCTSTR pszName);

BOOL CancelWaitableTimer(HANDLE hTimer);//取消计时器

 

 

3.信号量内核对象(Semaphore)

包含一个使用计数,还有一个最大资源计数,一个当前资源计数。

HANDLE CreateSemaphore( PSECURITY_ATTRIBUTE psa, LONG lInitialCount, LONG lMaximumCount, PCTSTR pszName);
BOOL ReleaseSemaphore(HANDLE hSemaphore, LONG lReleaseCount,PLONG plPreviousCount4.互斥量内核对象(Mutex)

 信号量对象包含一个使用计数、线程ID以及一个递归计数。线程ID用来标识当前占用这个互斥量的是系统中哪个线程,递归计数表示这个线程占用该互斥量的次数。

 

4.互斥量的使用规则:

1如果线程ID为0(无效),那么该互斥量不为任何线程所占用,他处于触发状态。

2如果线程ID为非0值,那么有一个线程已经占用了该互斥量,他处于未触发状态

3与所有其他内核对象不同,操作系统对互斥量进行了特殊处理,允许它们违反一些常规的规则(下面说)

HANDLE CreateMutex( LPSECURITY_ATTRIBUTESlpMutexAttributes,  BOOLbInitialOwner,  LPCTSTRlpName);

BOOL ReleaseMutex(HANDLE hMutex);

 

相关文章:

  • 2021-05-29
  • 2021-07-11
  • 2021-05-20
  • 2022-01-03
  • 2021-06-14
  • 2022-01-24
  • 2022-12-23
猜你喜欢
  • 2021-05-26
  • 2021-12-11
  • 2022-12-23
  • 2022-12-23
  • 2022-01-23
  • 2022-12-23
  • 2021-08-19
相关资源
相似解决方案