DELPHIÖÐÍê³É¶Ë¿Ú(IOCP)µÄ¼òµ¥·ÖÎöÍêÕûƪ
Ï£Íû´ó¼ÒÔÚתÌùµÄʱºò×¢Ã÷³ö´¦£¬Ð»Ð»)
ÓÃDELPHI¿ª·¢ÍøÂç´úÂëÒѾÓÐÒ»¶Îʱ¼äÁË£¡
ÎÒ·¢ÏÖÔÚÍøÉÏÓÃVCÀ´ÊµÏÖÍê³É¶Ë¿Ú£¨IOCP£©µÄ´úÂëºÜ¶à£¬µ«ÊÇʹÓÃDELPHIÀ´ÊµÏֵľͱȽÏÉÙÁË¡£¶ÔIOCP½²µÄÇå³þµÄ¾Í¸üÉÙÁË¡£ÔÚÕâÀïÎÒ°Ñ×Ô¼º±àдDELPHIϵÄIOCPд³öÀ´£¬Ï£Íû¶Ô¸ÕѧÍê³É¶Ë¿ÚµÄÅóÓÑÓиö°ïÖú¡£
Ê×ÏÈÎÒÃÇÀ´Á˽âһЩÔÚʹÓÃIOCPµÄʱºòÐèҪʹÓõÄһЩ½á¹¹£¡
£¨1£©£ºµ¥IOÊý¾Ý½á¹¹
LPVOID = Pointer;
LPPER_IO_OPERATION_DATA = ^ PER_IO_OPERATION_DATA ;
PER_IO_OPERATION_DATA = packed record
Overlapped: OVERLAPPED;
DataBuf: TWSABUF;
Buffer: array [0..1024] of CHAR;
BytesSEND: DWORD;
BytesRECV: DWORD;
end;
ÉÏÃæµÄ½á¹¹ÖÐOverlapped: OVERLAPPED;ºÍDataBuf: TWSABUF;Êǹ̶¨µÄ½á¹¹ÀàÐÍ¡£Buffer: array [0..1024] of CHAR;ÊÇÓÃÀ´±£´æ½ÓÊÜÊý¾ÝµÄ»º´æ¡£BytesSEND: DWORD;ÓÃÀ´±êÖ¾·¢ËÍÊý¾ÝµÄ³¤¶È¡£BytesRECV: DWORD;ÓÃÀ´±êÖ¾½ÓÊÜÊý¾ÝµÄ³¤¶È¡£ÒòΪÍê³É¶Ë¿ÚµÄ¹¤×÷ÕßÏ߳̿ÉÒÔ½ÓÊܵ½À´×Ô¿Í»§¶ËµÄÊý¾Ý£¬Í¬Ê±»¹¿ÉÒÔ½ÓÊܵ½×Ô¼º·¢Ë͸ø¿Í»§¶ËµÄÊý¾Ý£¬ËùÒÔÎÒÃÇʹÓÃBytesSEND£¬BytesRECV±äÁ¿À´ËµÊÇÓÃÀ´Çø·ÖÕâ´ÎµÄÊý¾ÝÊÇÀ´×Ô¿Í»§¶ËµÄÊý¾Ý»¹ÊÇ×Ô¼º·¢ËͳöÈ¥µÄÊý¾Ý¡£ÏêϸµÄʹÓ÷½·¨£¬ÎÒ»áÔÚÏÂÃæÏêϸ˵Ã÷¡£
£¨2£©£º“µ¥¾ä±úÊý¾Ý½á¹¹”
LPPER_HANDLE_DATA = ^ PER_HANDLE_DATA;
PER_HANDLE_DATA = packed record
Socket: TSocket;
end;
ÏÂÀ´ÎÒ´Ó±àдһ¸öÍê³É¶Ë¿ÚµÄΪÀý˵Ã÷¡£
if WSAStartUp($202, wsData) <> 0 then
begin
WSACleanup();
end;
¼ÓÔØSOCKET¡£ÎÒʹÓõÄÊÇ2.2°æÎªÁ˺óÃæ·½±ã¼ÓÈëÐÄÌø¡£
CompletionPort:=CreateIOCompletionPort(INVALID_HANDLE_VALUE,0,0,0);
´´½¨Ò»¸öÍê³É¶Ë¿Ú¡£
GetSystemInfo(LocalSI);
for I:=0 to LocalSI.dwNumberOfProcessors * 2 -1 do
begin
hThread := CreateThread(nil, 0, @ServerWorkerThread, Pointer(CompletionPort),0, ThreadID);
if (hThread = 0) then
begin
Exit;
end;
CloseHandle(hThread);
end;
¸ù¾ÝCPUµÄÊýÁ¿´´½¨CPU*2ÊýÁ¿µÄ¹¤×÷ÕßÏ̡߳£
Listensc:=
Ïà¹ØÎĵµ£º
3.2 Óû§µÇ¼·½°¸
ÔÚ½øÈëÒ»¸öϵͳʱ£¬±ØÐëÏÈÔڵǼ´°ÌåÖÐÊäÈëÕýÈ·µÄÓû§ÃûºÍÃÜÂë²ÅÄܽøÈë¡£ÕâÑù¿ÉÒÔÈ·±£ÏµÍ³µÄ°²È«ÐԺͱ£ÃÜÐÔ£¬µÇ¼´°ÌåµÄÖÆ×÷°´ÕÕϵͳµÄ´óС¼°Óô¦£¬¿ÉÒÔ·ÖΪ²»Í¬µÄµÇ¼´°ÌåÑùʽ£¬ÔÚϵͳµÚÒ»´ÎµÇ¼ǰ£¬Ê×ÏÈÒª¶Ô²Ù×÷Ô±ÐÅÏ¢½øÐÐÏàÓ¦µÄÉèÖᣱ¾½Ú½«¶ÔµÇ¼´°Ìå¼°²Ù×÷Ô±¹ÜÀí´°ÌåµÄÖÆ×÷¹ý³Ì½øÐÐÏêϸµÄ˵Ã÷ ......
ÔÚDelphiÓ¦ÓóÌÐòÖÐʹÓÃDLL
¡¡¡¡Delphi²»½ö¿Éµ÷ÓÃC£«£«²úÉúµÄDLLÄ£¿é£¬Í¬ÑùC£«£«³ÌÐòÒ²¿Éµ÷ÓÃDelphiËù²úÉúµÄDLL²¿¼þ¡£ÕâÑù½»»¥µ÷Óã¬ÎÞÐëÖØ¸´¿ª·¢£¬´ó´óËõ¶ÌÁËÉú²úÖÜÆÚ¡£
¡¡¡¡DelphiÓëVisualBasic¡¢VisualFoxProµÈÈí¼þÒ»Ñù£¬ÊôÓÚRAD¹¤¾ß£¨¿ìËÙÓ¦Óÿª·¢¹¤¾ß£©¡£ÊʺϿª·¢32λ»ò16λ£¯32λ»ìºÏÓ¦ÓóÌÐò¡£DelphiËùÊ¹Ó ......
Ò»ÌáÆð»ùÓÚWeb Services¼¼ÊõµÄÓ¦ÓóÌÐò¿ª·¢£¬Ò»°ãÈËÊ×ÏÈÏëµ½µÄ¿ª·¢¹¤¾ßÊÇVs.net£¬Æäʵ×÷Ϊ¿ìËÙÓ¦ÓóÌÐò¿ª·¢¹¤¾ß(RAD)µÄÀÏ´ó£¬Delphi´Ó6.0¾Í¿ªÊ¼Ö§³ÖWeb ServicesµÄ¿ª·¢ºÍÓ¦ÓÃÁË£¬±¾ÎÄͨ¹ýʹÓÃDelphi 7.0µ÷ÓÃÐÂÀË·¢ËͶÌÐŵÄWeb Service½øÐжÌÐÅÓ¦ÓóÌÐò¿ª·¢ÕâһʵÀýÏêϸµÄ½éÉÜÔÚDelphiÖÐÈçºÎ¿ª·¢»ùÓÚWeb ServicesµÄÓ¦ÓÃϵͳ¡ ......
ÉèÓÐÒÔÏÂÈý¸ö±äÁ¿£º
var
s:string;
p:pchar;
a:array[1..20] of char;
ÄÇôÈýÕßÖ®¼äµÄת»»ÈçÏ£º
1¡¢×Ö·û´®µ½PChar
p:=PChar(s);
2¡¢PCharµ½×Ö·û´®
s:=p;
3¡¢PCharµ½×Ö·ûÊý×é
StrCopy(@a,p);
4¡¢×Ö·ûÊý×éµ½PChar
......