摘要:
以异步方式调用函数为了用线程池来以异步的方式执行一个函数,我们需要定义一个具有以下原型的函数:VOID CALLBACK SimpleCallback( [in, out] PTP_CALLBACK_INSTANCE Instance, [in, out, optional] PVOID Context);然后为了让线程池中的一个线程来执行该函数,我们需要向线程池提交一个请求:BOOL WINAPI TrySubmitThreadpoolCallback( __in PTP_SIMPLE_CALLBACK pfns, __in_out_opt PVOID pv, __in_opt PTP_CA 阅读全文
摘要:
1.打开和关闭设备Windows的优势之一是它所支持的设备数量。就我们的讨论而言,我们把设备定义为能够与之进行通信的任何东西。表1列出了一些设备及其常见用途。表1:各种设备及其常见用途设备常见用途文件永久存储任何数据目录属性和文件压缩的设置逻辑磁盘驱动器格式化驱动器物理磁盘驱动器访问分区表串口通过电话线传输数据并口将数据传输至打印机邮件槽一对多数据传输,通常是通过网络传到另一台运行Windows的机器上命名管道一对一数据传输,通常是通过网络传到另一台运行Windows的机器上匿名管道单机上的一对一数据传输(绝对不会跨网络)套接字报文或数据流的传输,通常是通过网络传到任何支持套接字的机器上(机器 阅读全文
摘要:
等待函数等待函数使一个线程自愿进入等待,直到指定的内核对象被触发为止。DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); DWORD WaitForMultipleObjects( DWORD nCount, CONST HANDLE* lpHandles, BOOL fWaitAll, DWORD dwMilliseconds );时间内核对象创建时间内核对象:HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualRes 阅读全文
摘要:
原子访问:Interlocked系列函数所谓原子访问,指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源。LONG InterlockedExchangeAdd( LONG volatile* Addend, LONG Value);LONGLONG InterlockedExchangeAdd64( LONGLONG volatile* Addend, LONGLONG Value);上面两个函数:参数Addend 为要递增或者递减的变量的地址参数Value为增量值,可以为负数,表示前一个变量参数递减。LONG InterlockedExchange( LONG 阅读全文
摘要:
线程的挂起和恢复DWORDSuspendThread ( HANDLE hThread ); //挂起线程DWORDResumeThread ( HANDLE hThread ); //恢复线程SuspendThread和 ResumeThread 都返回之前的挂起计数。一个线程最多可以挂起MAXIMUM_SUSPEND_COUNT (WinNT.h中定义为127次)。进程的挂起和恢复对于Windows来说,不存在暂停或恢复进程的概念,因为进程从来不会被安排获得cpu时间。但是我们可以创建一个函数,用来挂起或者恢复进程中的全部线程,这样就能挂起或者恢复一个进程了。参考代码如下:#include 阅读全文