- 博客(1)
- 资源 (6)
- 收藏
- 关注
转载 [转载]windows路径操作API函数
路径截断与合并函数 PathRemoveArgs 去除路径的参数 PathRemoveBackslash 去除路径最后的反斜杠“\” PathAddBackslash 在路径最后加上反斜杠“\” PathRemoveBlanks 去除路
2014-03-06 23:41:10 741
代码优化-有效使用内存.pdf 扫描版
代码优化:有效使用内存》是由(美)Kris Kaspersky编写,电子工业出版社出版的一本书籍。系统深入地介绍了各种代码优化编程技术。全书分为4章。第1章集中介绍如何确定程序中消耗CPU时钟最多的热点代码的所谓程序剖析技术以及典型部分工具的实用知识。第2,3章分别全面介绍RAM了系统与高速缓存子系统的代码优化知识。第4章主要介绍了机器代码优化技术。各章在讨论基本原理的同时详细给出了代码实例,并对优化性能进行了定量的分析。
2017-09-27
国人开发强悍IOCP代码Code
国人开发强悍IOCP代码,全部代码
其中一个单元的代码:
unit uIOCompletionPort;
interface
uses
Windows, WinSock2, uWin32Const, uException, uDIProtocol, uDIClientChannel;
type
TIOCompletionPort = class
private
m_hCompletionPort: Thandle;
private
procedure CreateCompletionPort;
public
function AssociateSocketWithCompletionPort( hDevice: THandle;
dwCompletionKey: DWORD): Boolean;
function GetIOCompletionStatus( var FClientChannel: TDIClientChannel;
var pHandleData: PPerHandleData;
var dwIoSize: DWORD): Boolean; overload;
function GetIOCompletionStatus( var FClientChannel: TDIClientChannel;
var pHandleData: PPerHandleData;
var dwIoSize: DWORD;
dwMilliseconds: DWORD): Boolean; overload;
function PostIOCompletionStatus( lpCompletionKey: DWORD;
lpOverlapped: POverlapped;
lpNumberOfBytesTransferred: DWORD): Boolean;
public
constructor Create;
destructor Destroy; override;
end;
implementation
constructor TIOCompletionPort.Create;
begin
inherited Create;
CreateCompletionPort;
end;
destructor TIOCompletionPort.Destroy;
begin
CloseHandle(m_hCompletionPort);
inherited Destroy;
end;
procedure TIOCompletionPort.CreateCompletionPort;
var
s: TSocket;
begin
s := Winsock2.socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if (s = Winsock2.INVALID_SOCKET) then
raise TException.Create(ErrWin32Error, GetLastError(), 'Winsock2.socket');
m_hCompletionPort := CreateIOCompletionPort(s, 0, 0, 0);
if (m_hCompletionPort = 0) then
raise TException.Create(ErrWin32Error, GetLastError(), 'CreateIOCompletionPort');
Winsock2.closesocket(s);
end;
function TIOCompletionPort.AssociateSocketWithCompletionPort( hDevice: THandle;
dwCompletionKey: DWORD ): Boolean;
var
h: THandle;
begin
Result := TRUE;
h := CreateIOCompletionPort(hDevice, m_hCompletionPort, dwCompletionKey, 0);
if (h m_hCompletionPort) then begin
Result := FALSE;
raise TException.Create(ErrWin32Error, GetLastError(), 'AssociateSocketWithCompletionPort');
end;
end;
function TIOCompletionPort.GetIOCompletionStatus( var FClientChannel: TDIClientChannel;
var pHandleData: PPerHandleData;
var dwIoSize: DWORD): Boolean;
begin
Result := GetQueuedCompletionStatus( m_hCompletionPort,
dwIOSize,
DWORD(FClientChannel),
POVERLAPPED(pHandleData),
INFINITE );
end;
function TIOCompletionPort.GetIOCompletionStatus( var FClientChannel: TDIClientChannel;
var pHandleData: PPerHandleData;
var dwIoSize: DWORD;
dwMilliseconds: DWORD): Boolean;
var
bRet: Boolean;
nLastError: DWORD;
begin
bRet := TRUE;
if FALSE = GetQueuedCompletionStatus( m_hCompletionPort,
dwIOSize,
DWORD(FClientChannel),
POVERLAPPED(pHandleData),
INFINITE ) then
begin
nLastError := GetLastError();
if (nLastError WAIT_TIMEOUT) then
raise TException.Create(ErrWin32Error, GetLastError(), 'GetQueuedCompletionStatus');
bRet := FALSE;
end;
Result := bRet;
end;
function TIOCompletionPort.PostIOCompletionStatus( lpCompletionKey: DWORD;
lpOverlapped: POverlapped;
lpNumberOfBytesTransferred: DWORD): Boolean;
begin
Result := PostQueuedCompletionStatus( m_hCompletionPort,
lpNumberOfBytesTransferred,
lpCompletionKey,
lpOverlapped );
end;
end.
2008-12-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人