¸½ ¼
Timer¿Ø¼þµÄÁé»îʹÓÃ:
Timer¿Ø¼þ¿ÉÒÔÓÃ×÷ʼþµÄÑ»·£¬ÓÃÒÔ¼ì²éÁ¬½Ó״̬£¬Ò»µ©Á¬½Ó¶Ï¿ª£¬¿ÉÒÔ×Ô¶¯½øÐÐÖØÁ¬¡£Ò²¿ÉÒÔ×ö¼ÆÊ±Æ÷Óã¬ÔÚÁ¬Á˺ܳ¤Ê±¼äÈÔȻûÁ¬½ÓÉϵÄʱºò£¬×Ô¶¯¶Ï¿ªÁ¬½Ó£¬ÌáʾÓû§ÖØÐÂÁ¬½Ó£¬Õâ¸öʱ¼äÁ¿ÓÉÓû§ÔڿؼþµÄintervalÊôÐÔÉèÖ᣻¹¿ÉÒÔ½«ºÜ¶àʼþ´¥·¢´ò°ü£¬ÕâһϵÁеÄʼþ¿ÉÒÔÒ»¸ötimer¿Ø¼þÄÒÀ¨£¬Ê¹ÓÃʱºòÇý¶¯Õâ¸ötimer¿Ø¼þ¼´¿É¡£ÔÚ±¾³ÌÐòÖÐÕâЩ¶¼µÃµ½ÌåÏÖ£¬±ÈÈçʵÏÖÁËÏÞÖÆÍ¬Ò»IPµØÖ·Á¬Ðø×¢²áIDºÅµÄ¹¦ÄÜ¡£
Ö л
ʱ¹âÁ÷ÊÅ£¬Àú¾¼¸¸öÔµıÏÒµÉè¼Æ½Ó½üÁËβÉù£¬ÎÒÔÚÆÚ¼äѧµ½ÁËÐí¶àÐÂ֪ʶ,¿ÎÌâ·ÖÎöÓëÉè¼Æ¹¤×÷´Ó¿ªÌ⵽˳ÀûÍê³É£¬´óµ½×ÜÌå¿ò¼Ü£¬Ð¡µ½Ä³Ð©Ï¸½ÚµÄÍÆÇã¬×ÔʼÖÁÖÕ¶¼Êܵ½XXÀÏʦµÄϸÐÄÖ¸µ¼ºÍ¹Ø»³¡£ÕÅÀÏʦԨ²©µÄ֪ʶºÍ»åÈ˲»¾ëµÄ½Ì»åʹÎÒÊÜÒæ·Ëdz£¬ÑϽ÷µÄ̬¶È¼°×Î×β»¾ëµÄÑо¿×÷·çÊÇÎÒ½ñºó¹¤×÷ºÍѧϰµÄ¿¬Ä£¡£Îҷdz£¸Ð¼¤ÕÅÀÏʦһֱÒÔÀ´¶ÔÎҵİïÖúºÍ½ÌÓý£¬ÔÚÕâÀïÎÒ±íʾ³ÏÖ¿µÄ¸Ð¼¤¡£
¡¾ÔÎÄÒÑɾ³ý£¬ÈçÐèÍêÕûÂÛÎÄ£¬¼ÓQQ£ºÏê̸¡¿ ¡¾Í¨Ðʤ³Ì±¾×¨¿Æ±ÏÒµÂÛÎÄÐÞ¸ÄÓëÄâ¸å×é¡¿<¹²1Íò
5ǧ×Ö×óÓÒ>
µÚ¶þ²¿·Ö ÍâÎÄ×ÊÁÏ·Òë
Windows Sockets 2.0: Write Scalable Winsock Apps
Using Completion Ports(excerpts)
One of the most common things a server does is accept connections from clients. The AcceptEx function is the only Winsock API capable of using overlapped IO to accept connections on a socket. The interesting thing about AcceptEx is that it requires an additional socket as one of the parameters to the API. In a normal, synchronous accept function call, the new socket is the return value from the API. However, since AcceptEx is an overlapped operation, the accepted socket must be created (but not
bound or connected) in advance, and passed to the API. A typical psuedocode snippet that uses AcceptEx might look like the following:
do {
-Wait for a previous AcceptEx to complete
-Create a new socket and associate it with the completion port -Allocate context structure etc. -Post an AcceptEx request. }while(TRUE);
¡¾ÔÎÄÒÑɾ³ý£¬ÈçÐèÍêÕûÂÛÎÄ£¬¼ÓQQ£ºÏê̸¡¿ ¡¾Í¨Ðʤ³Ì±¾×¨¿Æ±ÏÒµÂÛÎÄÐÞ¸ÄÓëÄâ¸å×é¡¿<¹²1Íò
5ǧ×Ö×óÓÒ>
ÓÃÍê³É¶Ë¿Ú¿ª·¢´óÏìÓ¦¹æÄ£µÄWinsockÓ¦ÓóÌÐò
£¨½ÚÑ¡£©
·þÎñÆ÷Òª×öµÄ×îÆÕͨµÄÊÂÇéÖ®Ò»¾ÍÊǽÓÊÜÀ´×Ô¿Í»§¶ËµÄÁ¬½ÓÇëÇó¡£ÔÚÌ×½Ó×ÖÉÏʹÓÃÖØµþIO½ÓÊÜÁ¬½ÓµÄΩһAPI¾ÍÊÇAcceptEx()º¯Êý¡£ÓÐȤµÄÊÇ£¬Í¨³£µÄͬ²½½ÓÊܺ¯Êýaccept()µÄ·µ»ØÖµÊÇÒ»¸öеÄÌ×½Ó×Ö£¬¶øAcceptEx()º¯ÊýÔòÐèÒªÁíÍâÒ»¸öÌ×½Ó×Ö×÷ΪËüµÄ²ÎÊýÖ®Ò»¡£ÕâÊÇÒòΪAcceptEx()ÊÇÒ»¸öÖØµþ²Ù×÷£¬ËùÒÔÄãÐèÒªÊÂÏÈ´´½¨Ò»¸öÌ×½Ó×Ö(µ«²»Òª°ó¶¨»òÁ¬½ÓËü)£¬²¢°ÑÕâ¸öÌ×½Ó×Öͨ¹ý²ÎÊý´«¸øAcceptEx()¡£ÒÔÏÂÊÇһС¶ÎµäÐ͵ÄʹÓÃAcceptEx()µÄα´úÂ룺 do {
-µÈ´ýÉÏÒ»¸ö AcceptEx Íê³É
-´´½¨Ò»¸öÐÂÌ×½Ó×Ö²¢ÓëÍê³É¶Ë¿Ú½øÐйØÁª -ÉèÖñ³¾°½á¹¹µÈµÈ -·¢³öÒ»¸ö AcceptEx ÇëÇó }while(TRUE);
×÷Ϊһ¸ö¸ßÏìÓ¦ÄÜÁ¦µÄ·þÎñÆ÷£¬Ëü±ØÐë·¢³ö×ã¹»µÄAcceptExµ÷Óã¬Êغò×Å£¬Ò»µ©³öÏÖ¿Í»§¶ËÁ¬½ÓÇëÇó¾ÍÁ¢¿ÌÏìÓ¦¡£ÖÁÓÚ·¢³ö¶àÉÙ¸öAcceptEx²Å¹»£¬¾ÍÈ¡¾öÓÚÄãµÄ·þÎñÆ÷³ÌÐòËùÆÚ´ýµÄͨÐŽ»Í¨ÀàÐÍ¡£±ÈÈ磬Èç¹û½øÈëÁ¬½ÓÂʸߵÄÇé¿ö(ÒòΪÁ¬½Ó³ÖÐøÊ±¼ä½Ï¶Ì£¬»òÕß³öÏÖ½»Í¨¸ß·å)£¬ÄÇôËùÐèÒªÊØºòµÄAcceptExµ±È»Òª±ÈÄÇЩż¶û½øÈëµÄ¿Í»§¶ËÁ¬½ÓµÄÇé¿öÒª¶à¡£´ÏÃ÷µÄ×ö·¨ÊÇ£¬ÓÉÓ¦ÓóÌÐòÀ´·ÖÎö½»Í¨×´¿ö£¬²¢µ÷ÕûAcceptExÊØºòµÄÊýÁ¿£¬¶ø²»Êǹ̶¨ÔÚij¸öÊýÁ¿ÉÏ¡£
¶ÔÓÚWindows2000£¬WinsockÌṩÁËһЩ»úÖÆ£¬°ïÖúÄãÅж¨AcceptExµÄÊýÁ¿ÊÇ·ñ×ã¹»¡£Õâ¾ÍÊÇ£¬ÔÚ´´½¨¼àÌýÌ×½Ó×Öʱ´´½¨Ò»¸öʼþ£¬Í¨¹ýWSAEventSelect()Õâ¸öAPI²¢×¢²áFD_ACCEPTʼþ֪ͨÀ´°ÑÌ×½Ó×ÖºÍÕâ¸öʼþ¹ØÁªÆðÀ´¡£Ò»µ©ÏµÍ³ÊÕµ½Ò»¸öÁ¬½ÓÇëÇó£¬Èç¹ûϵͳÖÐûÓÐAcceptEx()ÕýÔڵȴý½ÓÊÜÁ¬½Ó£¬ÄÇôÉÏÃæµÄʼþ½«ÊÕµ½Ò»¸öÐźš£Í¨¹ýÕâ¸öʼþ£¬Äã¾Í¿ÉÒÔÅжÏÄãÓÐûÓз¢³ö×ã¹»µÄAcceptEx()£¬»òÕß¼ì²â³öÒ»¸ö·ÇÕý³£µÄ¿Í»§ÇëÇó(ÏÂÎÄÊö)¡£ÕâÖÖ»úÖÆ¶ÔWindows NT 4.0²»ÊÊÓá£
ʹÓÃAcceptEx()µÄÒ»´óºÃ´¦ÊÇ£¬Äã¿ÉÒÔͨ¹ýÒ»´Îµ÷ÓþÍÍê³É½ÓÊܿͻ§¶ËÁ¬½ÓÇëÇóºÍ½ÓÊÜÊý¾Ý(ͨ¹ý´«ËÍlpOutputBuffer²ÎÊý)Á½¼þÊÂÇé¡£Ò²¾ÍÊÇ˵£¬ Èç¹û¿Í»§¶ËÔÚ·¢³öÁ¬½ÓµÄͬʱ´«ÊäÊý¾Ý£¬ÄãµÄAcceptEx()µ÷ÓÃÔÚÁ¬½Ó´´½¨²¢½ÓÊÕÁ˿ͻ§¶ËÊý¾Ýºó¾Í¿ÉÒÔÁ¢¿Ì·µ»Ø¡£ÕâÑù¿ÉÄÜÊǺÜÓÐÓõģ¬