VC-Windows核心编程
文章平均质量分 73
primer_programer
永无止境
展开
-
AfxBeginThread和AfxEndThread
启动线程:CWinThread* AfxBeginThread( 线程函数,this ); 线程的退出:在刚刚使用的时候,退出线程的方法有问题,导致退出的时候异常。下面说线程退出的方法:1. 线程函数返回线程都在死循环中,当满足一定条件时,return,也会将线程结束。2. AfxEndThread这个函数只能用在线程函数中,当满足一定条件是,调原创 2008-02-25 16:20:00 · 27424 阅读 · 4 评论 -
WideCharToMultiByte和MultiByteToWideChar函数的用法
为了支持Unicode编码,需要多字节与宽字节之间的相互转换。这两个系统函数在使用时需要指定代码页,在实际应用过程中遇到乱码问题,然后重新阅读《Windows核心编程》,总结出正确的用法。WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。MultiByteToWideChar的代码页用来标记与一个多字节字符串相关的代码页。常用的代码页由CP_A原创 2008-01-07 13:32:00 · 3436 阅读 · 1 评论 -
I/O Completion Ports
I/O Completion Ports I/O completion ports are the mechanism by which an application uses a pool of threads that was created when the application was started to process asynchronous I/O reques翻译 2007-12-26 15:43:00 · 885 阅读 · 0 评论 -
异步IO、APC、IO完成端口、线程池与高性能服务器(三) IO完成端口
IO完成端口下面摘抄于MSDN《I/O Completion Ports》,smallfool翻译,原文请参考CSDN文档中心文章《I/O Completion Ports》, http://dev.csdn.net/Develop/article/29%5C29240.shtm 。I/O完成端口是一种机制,通过这个机制,应用程序在启动时会首先创建一个线程池,然后该应用程序使用线程池处理转载 2007-12-26 15:39:00 · 1665 阅读 · 0 评论 -
异步IO、APC、IO完成端口、线程池与高性能服务器(二) APC
Alertable IO(告警IO)提供了更有效的异步通知形式。ReadFileEx / WriteFileEx在发出IO请求的同时,提供一个回调函数(APC过程),当IO请求完成后,一旦线程进入可告警状态,回调函数将会执行。 以下五个函数能够使线程进入告警状态: SleepEx WaitForSingleObjectEx WaitForMultipleObject转载 2007-12-26 15:38:00 · 1393 阅读 · 0 评论 -
异步IO、APC、IO完成端口、线程池与高性能服务器(一) 异步IO
背景:轮询 PIO DMA 中断 早期IO设备的速度与CPU相比,还不是太悬殊。CPU定时轮询一遍IO设备,看看有无处理要求,有则加以处理,完成后返回继续工作。至今,软盘驱动器还保留着这种轮询工作方式。 随着CPU性能的迅速提高,这种效率低下的工作方式浪费了大量的CPU时间。因此,中断工作方式开始成为普遍采用的技术。这种技术使得IO设备在需要得到服务时,能够产生一个硬件中断,迫使转载 2007-12-26 15:37:00 · 1131 阅读 · 0 评论 -
异步IO、APC、IO完成端口、线程池与高性能服务器(五) 服务器的性能指标
服务器的性能指标 作为一个网络服务器程序,性能永远是第一位的指标。性能可以这样定义:在给定的硬件条件和时间里,能够处理的任务量。能够最大限度地利用硬件性能的服务器设计才是良好的设计。 设计良好的服务器还应该考虑平均服务,对于每一个客户端,服务器应该给予每个客户端平均的服务,不能让某一个客户端长时间得不到服务而发生“饥饿”的状况。 可伸缩性,也就是说,随着硬件能力的提高,服务器转载 2007-12-26 15:41:00 · 1606 阅读 · 1 评论 -
异步IO、APC、IO完成端口、线程池与高性能服务器(四) 线程池
线程池下面摘抄于MSDN《Thread Pooling》。有许多应用程序创建的线程花费了大量时间在睡眠状态来等待事件的发生。还有一些线程进入睡眠状态后定期被唤醒以轮询工作方式来改变或者更新状态信息。线程池可以让你更有效地使用线程,它为你的应用程序提供一个由系统管理的工作者线程池。至少会有一个线程来监听放到线程池的所有等待操作,当等待操作完成后,线程池中将会有一个工作者线程来执行相应的回调函数。转载 2007-12-26 15:40:00 · 1237 阅读 · 0 评论 -
使用 ToolHelp32 库枚举进程
ToolHelp32 库函数在 KERNEL32.dll 中,它们都是标准的 API 函数。但是 Windows NT 4.0 不提供这些函。 ToolHelp32 库中有各种各样的函数可以用来枚举系统中的进程、线程以及获取内存和模块信息。其中枚举进程 只需用如下三个的函数:CreateToolhelp32Snapshot()、Process32First()和 Process32N转载 2007-12-26 15:29:00 · 1602 阅读 · 0 评论 -
只允许程序运行一个实例
有两类方法:第一类: 判断进程是否存在,如果存在则直接退出。第二类: 最简单也是最准确的方法,用命名的互斥对象。 代码如下: (m_hMutex可以是成员变量,全局变量或者是局部变量)m_hMutex = CreateMutex( NULL, FALSE, _T("NOT_IMIDE") );原创 2007-12-26 15:27:00 · 1135 阅读 · 1 评论 -
进程间通信的一种方法——剪贴板
进程间通信有很多种方法: MSMQ COM/DCOM DDE 剪贴板 管道 SOCKET 数据库 这里介绍剪贴板使用方法:使用WM_COPYDATA是个简单,可靠的办法 用WM_COPYDATA的前提: 1,知道接收消息进程的句柄。 2,接收消息进程重载了WM_COPYDATA消息映射,能对其做出反应(原创 2007-12-26 15:22:00 · 1048 阅读 · 1 评论 -
CreateThread和_beginthread的区别
CreateThread 是一个Win 32API 函数,_beginthread 是一个CRT(C Run-Time)函数,他们都是实现多线城的创建的函数,而且他们拥有相同的使用方法,相同的参数列表。但是他们有什么区别呢?一般来说,从使用角度是没有多大的区别的,CRT函数中除了signal()函数不能在CreateThread创建的线城中使用外,其他的CRT 函数都可一正转载 2007-12-26 15:20:00 · 1602 阅读 · 0 评论 -
启动进程——使用CreateProcess需注意的地方
启动一个进程有三种方法:WinExec,ShellExecute,CreateProcess。这里只说明CreateProcess的用法。 CreateProcess的参数可以查MSDN和《Windows API参考手册》,这里不具体说明。下面给出常用的方法: STARTUPINFO startup; ZeroMemory(原创 2008-08-06 20:32:00 · 2178 阅读 · 0 评论