上一页 1 2 3 4 5 6 7 ··· 12 下一页
摘要: 以异步方式调用函数为了用线程池来以异步的方式执行一个函数,我们需要定义一个具有以下原型的函数: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 阅读全文
posted @ 2011-08-10 11:25 飞翔荷兰人 阅读(2968) 评论(0) 推荐(0) 编辑
摘要: 1.打开和关闭设备Windows的优势之一是它所支持的设备数量。就我们的讨论而言,我们把设备定义为能够与之进行通信的任何东西。表1列出了一些设备及其常见用途。表1:各种设备及其常见用途设备常见用途文件永久存储任何数据目录属性和文件压缩的设置逻辑磁盘驱动器格式化驱动器物理磁盘驱动器访问分区表串口通过电话线传输数据并口将数据传输至打印机邮件槽一对多数据传输,通常是通过网络传到另一台运行Windows的机器上命名管道一对一数据传输,通常是通过网络传到另一台运行Windows的机器上匿名管道单机上的一对一数据传输(绝对不会跨网络)套接字报文或数据流的传输,通常是通过网络传到任何支持套接字的机器上(机器 阅读全文
posted @ 2011-08-10 11:24 飞翔荷兰人 阅读(3861) 评论(0) 推荐(1) 编辑
摘要: 等待函数等待函数使一个线程自愿进入等待,直到指定的内核对象被触发为止。DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); DWORD WaitForMultipleObjects( DWORD nCount, CONST HANDLE* lpHandles, BOOL fWaitAll, DWORD dwMilliseconds );时间内核对象创建时间内核对象:HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualRes 阅读全文
posted @ 2011-08-10 11:23 飞翔荷兰人 阅读(591) 评论(0) 推荐(0) 编辑
摘要: 原子访问:Interlocked系列函数所谓原子访问,指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源。LONG InterlockedExchangeAdd( LONG volatile* Addend, LONG Value);LONGLONG InterlockedExchangeAdd64( LONGLONG volatile* Addend, LONGLONG Value);上面两个函数:参数Addend 为要递增或者递减的变量的地址参数Value为增量值,可以为负数,表示前一个变量参数递减。LONG InterlockedExchange( LONG 阅读全文
posted @ 2011-08-10 11:19 飞翔荷兰人 阅读(667) 评论(0) 推荐(0) 编辑
摘要: 线程的挂起和恢复DWORDSuspendThread ( HANDLE hThread ); //挂起线程DWORDResumeThread ( HANDLE hThread ); //恢复线程SuspendThread和 ResumeThread 都返回之前的挂起计数。一个线程最多可以挂起MAXIMUM_SUSPEND_COUNT (WinNT.h中定义为127次)。进程的挂起和恢复对于Windows来说,不存在暂停或恢复进程的概念,因为进程从来不会被安排获得cpu时间。但是我们可以创建一个函数,用来挂起或者恢复进程中的全部线程,这样就能挂起或者恢复一个进程了。参考代码如下:#include 阅读全文
posted @ 2011-08-10 11:18 飞翔荷兰人 阅读(10398) 评论(1) 推荐(2) 编辑
摘要: 线程与进程的关系一般将进程定义成一个正在运行的程序的一个实例,它由以下两部分构成。一个内核对象,操作系统用它来管理进程。内核对象也是系统保存进程统计信息的地方。 一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据。此外,它还包含动态内存分配,比如线程堆栈和堆的分配。 进程要做任何事情,都必须让一个线程在它的上下文中运行。该线程负责执行进程地址空间包含的代码。事实上,一个进程可以有多个线程,所有线程都在进程的地址空间中“同时”执行代码。为此,每个线程都有它自己的一组CPU寄存器和它自己的堆栈。每个进程至少要有一个线程来执行进程地址空间包含的代码。当系统创建一个进程的时候,会自动为进程创 阅读全文
posted @ 2011-08-09 14:47 飞翔荷兰人 阅读(1106) 评论(0) 推荐(0) 编辑
摘要: 1.创建进程BOOL CreateProcess( LPCWSTR pszImageName, LPCWSTR pszCmdLine, LPSECURITY_ATTRIBUTES psaProcess, LPSECURITY_ATTRIBUTES psaThread, BOOL fInheritHandles, DWORDfdwCreate,LPVOID pvEnvironment, LPWSTR pszCurDir, LPSTARTUPINFOW psiStartInfo, LPPROCESS_INFORMATION pProcInfo); pszImageName :是要执行进程的路径名. 阅读全文
posted @ 2011-08-09 11:17 飞翔荷兰人 阅读(5440) 评论(0) 推荐(2) 编辑
摘要: 1什么是内核对象 内核对象是内核分配的一段空间,如文件对象和进程对象等。可以用Windows提供的函数来创建相应的内核对象。创建成功后返回一个对象句柄,并且对象句柄值是进程相关的。程序不能直接操作内核对象,只能通过Windows提供的函数来控制。1.1内核对象的使用计数内核对象可以被多个进程同时使用,句柄值通常会不一样,但是引用的内容是同一块。内核对象的所有者是操作系统,而非进程,因此内核对象的存在时间通常会比进程的存在时间长。内核对象中有一个值用来保存当前使用该内核对象的进程数,这就是使用计数。这样可以确保在没有进程引用该对象时系统中不保留任何内核对象。内核对象由内核控制何时释放,而不是由. 阅读全文
posted @ 2011-08-09 09:37 飞翔荷兰人 阅读(1395) 评论(0) 推荐(1) 编辑
摘要: 1.进程实例句柄加载到进程地址空间的每一个可执行文件或者dll文件都被赋予了一个独一无二的实例句柄.他实际上是一个内存基地址,系统将可执行程序的映像加载到进程地址空间中的这个位置。Ps :HMODULE和HINSTANCE 其实就是一回事.获得一个可执行文件或者dll文件的句柄/基地址:(1)GetModuleHandle函数HMODULE GetModuleHandle( LPCTSTRlpModuleName);调用这个函数时,参数指定了已在主调进程的地址空间中加载的一个可执行文件或者DLL文件的名称。或者参数为NULL时,会返回主调函数的可执行文件的基地址。(2)GetModuleHan 阅读全文
posted @ 2011-08-08 16:46 飞翔荷兰人 阅读(1489) 评论(0) 推荐(0) 编辑
摘要: 显式的载入DLL模块HMODULE WINAPILoadLibrary( __inLPCTSTR lpFileName);HMODULE WINAPI LoadLibraryEx( __in LPCTSTR lpFileName, HANDLE hFile, __in DWORD dwFlags);hFile参数是为将来扩充所保留的,现在必须将它设为NULL;dwFlags 参数可以被设置为0,或者下列标志的组合:DONT_RESOLVE_DLL_REFERENCES,LOAD_IGNORE_CODE_AUTHZ_LEVEL, LOAD_LIBRARY_AS_DATAFILE, LOAD_LI 阅读全文
posted @ 2011-08-08 15:45 飞翔荷兰人 阅读(1839) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 12 下一页

I Love Lina~