亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vc實現線程池_programing repository.mht

?? 線程池的源碼模壓可耕地可耕地枯可耕地在村枯枯枯要要要求
?? MHT
?? 第 1 頁 / 共 5 頁
字號:
    <TD>
      <DIV=20
      =
class=3Dcnt>=D5=E2=C1=BD=CC=EC=D4=DA=D7=F6=B9=D8=D3=DA=CD=F8=C2=E7=D6=A9=D6=
=EB=B5=C4=B3=CC=D0=F2,=CF=A3=CD=FB=BF=C9=D2=D4=CD=A8=B9=FD=CF=DF=B3=CC=B3=
=D8=C0=B4=CC=E1=B8=DF=B3=CC=D0=F2=B5=C4=D0=D4=C4=DC,=CD=F8=C9=CF=CB=D1=CB=
=F7=C1=CB=D2=BB=CF=C2,=BF=B4=B5=BD=D5=E2=B7=BD=C3=E6=B5=C4=B6=AB=CE=F7=BB=
=B9=B2=BB=C9=D9,=B8=FA=B4=F3=BC=D2=B7=D6=CF=ED=D2=BB=CF=C2!~=D3=D0=D0=ED=B6=
=E0=D3=A6=D3=C3=B3=CC=D0=F2=B4=B4=BD=A8=B5=C4=CF=DF=B3=CC=BB=A8=B7=D1=C1=CB=
=B4=F3=C1=BF=CA=B1=BC=E4=D4=DA=CB=AF=C3=DF=D7=B4=CC=AC=C0=B4=B5=C8=B4=FD=CA=
=C2=BC=FE=B5=C4=B7=A2=C9=FA=A1=A3=BB=B9=D3=D0=D2=BB=D0=A9=CF=DF=B3=CC=BD=F8=
=C8=EB=CB=AF=C3=DF=D7=B4=CC=AC=BA=F3=B6=A8=C6=DA=B1=BB=BB=BD=D0=D1=D2=D4=C2=
=D6=D1=AF=B9=A4=D7=F7=B7=BD=CA=BD=C0=B4=B8=C4=B1=E4=BB=F2=D5=DF=B8=FC=D0=C2=
=D7=B4=CC=AC=D0=C5=CF=A2=A1=A3=CF=DF=B3=CC=B3=D8=BF=C9=D2=D4=C8=C3=C4=E3=B8=
=FC=D3=D0=D0=A7=B5=D8=CA=B9=D3=C3=CF=DF=B3=CC=A3=AC=CB=FC=CE=AA=C4=E3=B5=C4=
=D3=A6=D3=C3=B3=CC=D0=F2=CC=E1=B9=A9=D2=BB=B8=F6=D3=C9=CF=B5=CD=B3=B9=DC=C0=
=ED=B5=C4=B9=A4=D7=F7=D5=DF=CF=DF=B3=CC=B3=D8=A1=A3=D6=C1=C9=D9=BB=E1=D3=D0=
=D2=BB=B8=F6=CF=DF=B3=CC=C0=B4=BC=E0=CC=FD=B7=C5=B5=BD=CF=DF=B3=CC=B3=D8=B5=
=C4=CB=F9=D3=D0=B5=C8=B4=FD=B2=D9=D7=F7=A3=AC=B5=B1=B5=C8=B4=FD=B2=D9=D7=F7=
=CD=EA=B3=C9=BA=F3=A3=AC=CF=DF=B3=CC=B3=D8=D6=D0=BD=AB=BB=E1=D3=D0=D2=BB=B8=
=F6=B9=A4=D7=F7=D5=DF=CF=DF=B3=CC=C0=B4=D6=B4=D0=D0=CF=E0=D3=A6=B5=C4=BB=D8=
=B5=F7=BA=AF=CA=FD=A1=A3<BR>&nbsp;&nbsp;=20
      =
=C4=E3=D2=B2=BF=C9=D2=D4=B0=D1=C3=BB=D3=D0=B5=C8=B4=FD=B2=D9=D7=F7=B5=C4=B9=
=A4=D7=F7=CF=EE=C4=BF=B7=C5=B5=BD=CF=DF=B3=CC=B3=D8=D6=D0=A3=AC=D3=C3Queu=
eUserWorkItem=BA=AF=CA=FD=C0=B4=CD=EA=B3=C9=D5=E2=B8=F6=B9=A4=D7=F7=A3=AC=
=B0=D1=D2=AA=D6=B4=D0=D0=B5=C4=B9=A4=D7=F7=CF=EE=C4=BF=BA=AF=CA=FD=CD=A8=B9=
=FD=D2=BB=B8=F6=B2=CE=CA=FD=B4=AB=B5=DD=B8=F8=CF=DF=B3=CC=B3=D8=A1=A3=B9=A4=
=D7=F7=CF=EE=C4=BF=B1=BB=B7=C5=B5=BD=CF=DF=B3=CC=B3=D8=D6=D0=BA=F3=A3=AC=BE=
=CD=B2=BB=C4=DC=D4=D9=C8=A1=CF=FB=C1=CB=A1=A3<BR>&nbsp;&nbsp;=20
      Timer-queue timers=BA=CDRegistered wait=20
      =
operations=D2=B2=CA=B9=D3=C3=CF=DF=B3=CC=B3=D8=C0=B4=CA=B5=CF=D6=A1=A3=CB=
=FB=C3=C7=B5=C4=BB=D8=B5=F7=BA=AF=CA=FD=D2=B2=B7=C5=D4=DA=CF=DF=B3=CC=B3=D8=
=D6=D0=A1=A3=C4=E3=D2=B2=BF=C9=D2=D4=D3=C3BindIOCompletionCallback=BA=AF=CA=
=FD=C0=B4=CD=B6=B5=DD=D2=BB=B8=F6=D2=EC=B2=BDIO=B2=D9=D7=F7=A3=AC=D4=DAIO=
=CD=EA=B3=C9=B6=CB=BF=DA=C9=CF=A3=AC=BB=D8=B5=F7=BA=AF=CA=FD=D2=B2=CA=C7=D3=
=C9=CF=DF=B3=CC=B3=D8=CF=DF=B3=CC=C0=B4=D6=B4=D0=D0=A1=A3<BR>&nbsp;&nbsp;=
=20
      =
=B5=B1=B5=DA=D2=BB=B4=CE=B5=F7=D3=C3QueueUserWorkItem=BA=AF=CA=FD=BB=F2=D5=
=DFBindIOCompletionCallback=BA=AF=CA=FD=B5=C4=CA=B1=BA=F2=A3=AC=CF=DF=B3=CC=
=B3=D8=B1=BB=D7=D4=B6=AF=B4=B4=BD=A8=A3=AC=BB=F2=D5=DFTimer-queue=20
      timers=BB=F2=D5=DFRegistered wait=20
      =
operations=B7=C5=C8=EB=BB=D8=B5=F7=BA=AF=CA=FD=B5=C4=CA=B1=BA=F2=A3=AC=CF=
=DF=B3=CC=B3=D8=D2=B2=BF=C9=D2=D4=B1=BB=B4=B4=BD=A8=A1=A3=CF=DF=B3=CC=B3=D8=
=BF=C9=D2=D4=B4=B4=BD=A8=B5=C4=CF=DF=B3=CC=CA=FD=C1=BF=B2=BB=CF=DE=A3=AC=BD=
=F6=CA=DC=CF=DE=D3=DA=BF=C9=D3=C3=B5=C4=C4=DA=B4=E6=A3=AC=C3=BF=D2=BB=B8=F6=
=CF=DF=B3=CC=CA=B9=D3=C3=C4=AC=C8=CF=B5=C4=B3=F5=CA=BC=B6=D1=D5=BB=B4=F3=D0=
=A1=A3=AC=D4=CB=D0=D0=D4=DA=C4=AC=C8=CF=B5=C4=D3=C5=CF=C8=BC=B6=C9=CF=A1=A3=
<BR>&nbsp;&nbsp;=20
      =
=CF=DF=B3=CC=B3=D8=D6=D0=D3=D0=C1=BD=D6=D6=C0=E0=D0=CD=B5=C4=CF=DF=B3=CC=A3=
=BAIO=CF=DF=B3=CC=BA=CD=B7=C7IO=CF=DF=B3=CC=A1=A3IO=CF=DF=B3=CC=B5=C8=B4=FD=
=D4=DA=BF=C9=B8=E6=BE=AF=D7=B4=CC=AC=A3=AC=B9=A4=D7=F7=CF=EE=C4=BF=D7=F7=CE=
=AAAPC=B7=C5=B5=BDIO=CF=DF=B3=CC=D6=D0=A1=A3=C8=E7=B9=FB=C4=E3=B5=C4=B9=A4=
=D7=F7=CF=EE=C4=BF=D0=E8=D2=AA=CF=DF=B3=CC=D6=B4=D0=D0=D4=DA=BF=C9=BE=AF=B8=
=E6=D7=B4=CC=AC=A3=AC=C4=E3=D3=A6=B8=C3=BD=AB=CB=FC=B7=C5=B5=BDIO=CF=DF=B3=
=CC=A1=A3<BR>&nbsp;&nbsp;=20
      =
=B7=C7IO=B9=A4=D7=F7=D5=DF=CF=DF=B3=CC=B5=C8=B4=FD=D4=DAIO=CD=EA=B3=C9=B6=
=CB=BF=DA=C9=CF=A3=AC=CA=B9=D3=C3=B7=C7IO=CF=DF=B3=CC=B1=C8IO=CF=DF=B3=CC=
=D0=A7=C2=CA=B8=FC=B8=DF=A3=AC=D2=B2=BE=CD=CA=C7=CB=B5=A3=AC=D6=BB=D2=AA=D3=
=D0=BF=C9=C4=DC=B5=C4=BB=B0=A3=AC=BE=A1=C1=BF=CA=B9=D3=C3=B7=C7IO=CF=DF=B3=
=CC=A1=A3IO=CF=DF=B3=CC=BA=CD=B7=C7IO=CF=DF=B3=CC=D4=DA=D2=EC=B2=BDIO=B2=D9=
=D7=F7=C3=BB=D3=D0=CD=EA=B3=C9=D6=AE=C7=B0=B6=BC=B2=BB=BB=E1=CD=CB=B3=F6=A1=
=A3=C8=BB=B6=F8=A3=AC=B2=BB=D2=AA=D4=DA=B7=C7IO=CF=DF=B3=CC=D6=D0=B7=A2=B3=
=F6=D0=E8=D2=AA=BA=DC=B3=A4=CA=B1=BC=E4=B2=C5=C4=DC=CD=EA=B3=C9=B5=C4=D2=EC=
=B2=BDIO=C7=EB=C7=F3=A1=A3<BR>&nbsp;&nbsp;=20
      =
=D5=FD=C8=B7=CA=B9=D3=C3=CF=DF=B3=CC=B3=D8=B5=C4=B7=BD=B7=A8=CA=C7=A3=AC=B9=
=A4=D7=F7=CF=EE=C4=BF=BA=AF=CA=FD=D2=D4=BC=B0=CB=FC=BD=AB=BB=E1=B5=F7=D3=C3=
=B5=BD=B5=C4=CB=F9=D3=D0=BA=AF=CA=FD=B6=BC=B1=D8=D0=EB=CA=C7=CF=DF=B3=CC=B3=
=D8=B0=B2=C8=AB=B5=C4=A1=A3=B0=B2=C8=AB=B5=C4=BA=AF=CA=FD=B2=BB=D3=A6=B8=C3=
=BC=D9=C9=E8=CF=DF=B3=CC=CA=C7=D2=BB=B4=CE=D0=D4=CF=DF=B3=CC=B5=C4=BB=F2=D5=
=DF=CA=C7=D3=C0=BE=C3=CF=DF=B3=CC=A1=A3=D2=BB=B0=E3=C0=B4=CB=B5=A3=AC=D3=A6=
=B8=C3=B1=DC=C3=E2=CA=B9=D3=C3=CF=DF=B3=CC=B1=BE=B5=D8=B4=E6=B4=A2=BA=CD=B7=
=A2=B3=F6=D0=E8=D2=AA=D3=C0=BE=C3=CF=DF=B3=CC=B5=C4=D2=EC=B2=BDIO=B5=F7=D3=
=C3=A3=AC=B1=C8=C8=E7=CB=B5RegNotifyChangeKeyValue=BA=AF=CA=FD=A1=A3=C8=E7=
=B9=FB=D0=E8=D2=AA=D4=DA=D3=C0=BE=C3=CF=DF=B3=CC=D6=D0=D6=B4=D0=D0=D5=E2=D1=
=F9=B5=C4=BA=AF=CA=FD=B5=C4=BB=B0=A3=AC=BF=C9=D2=D4=B8=F8QueueUserWorkIte=
m=B4=AB=B5=DD=D2=BB=B8=F6=D1=A1=CF=EEWT_EXECUTEINPERSISTENTTHREAD=A1=A3<B=
R>&nbsp;&nbsp;=20
      =
=D7=A2=D2=E2=A3=AC=CF=DF=B3=CC=B3=D8=B2=BB=C4=DC=BC=E6=C8=DDCOM=B5=C4=B5=A5=
=CF=DF=B3=CC=CC=D7=BC=E4=A3=A8STA=A3=A9=C4=A3=D0=CD=A1=A3<BR>&nbsp;&nbsp;=
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
=CE=AA=C1=CB=B8=FC=C9=EE=C8=EB=B5=D8=BD=B2=BD=E2=B2=D9=D7=F7=CF=B5=CD=B3=CA=
=B5=CF=D6=B5=C4=CF=DF=B3=CC=B3=D8=B5=C4=D3=C5=D4=BD=D0=D4=A3=AC=CE=D2=C3=C7=
=CA=D7=CF=C8=B3=A2=CA=D4=D7=C5=D7=D4=BC=BA=CA=B5=CF=D6=D2=BB=B8=F6=BC=F2=B5=
=A5=B5=C4=CF=DF=B3=CC=B3=D8=C4=A3=D0=CD=A1=A3<BR>&nbsp;&nbsp;<BR>&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =B4=FA=C2=EB=C8=E7=CF=C2=A3=BA<BR>&nbsp;&nbsp;&nbsp;=20
      =
/**//********************************************************************=
****/<BR>&nbsp;&nbsp;=20
      /**//* Test Our own thread=20
      =
pool.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      */<BR>&nbsp;&nbsp;=20
      =
/**//********************************************************************=
****/<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;=20
      typedef struct _THREAD_POOL<BR>&nbsp;&nbsp;=20
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HANDLE=20
      QuitEvent;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HANDLE=20
      =
WorkItemSemaphore;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;=20
      LONG WorkItemCount;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
LIST_ENTRY=20
      WorkItemHeader;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
CRITICAL_SECTION=20
      =
WorkItemLock;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
LONG=20
      ThreadNum;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HANDLE=20
      *ThreadsArray;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp; }THREAD_POOL,=20
      *PTHREAD_POOL;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp; typedef VOID=20
      (*WORK_ITEM_PROC)(PVOID Param);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp; =
typedef=20
      struct _WORK_ITEM<BR>&nbsp;&nbsp;=20
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LIST_ENTRY=20
      List;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      WORK_ITEM_PROC UserProc;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
PVOID=20
      UserParam;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; =

      }WORK_ITEM, =
*PWORK_ITEM;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;=20
      DWORD WINAPI WorkerThread(PVOID pParam)<BR>&nbsp;&nbsp;=20
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PTHREAD_POOL pThreadPool =
=3D=20
      (PTHREAD_POOL)pParam;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
HANDLE=20
      =
Events[2];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;=20
      Events[0] =3D=20
      pThreadPool-&gt;QuitEvent;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =

      Events[1] =3D=20
      =
pThreadPool-&gt;WorkItemSemaphore;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;=20
      for(;;)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
DWORD=20
      dwRet =3D WaitForMultipleObjects(2, Events, FALSE,=20
      =
INFINITE);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;=20
      if(dwRet =3D=3D=20
      =
WAIT_OBJECT_0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
break;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;=20
      //<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
//=20
      execute user's=20
      =
proc.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
//<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;=20
      else if(dwRet =3D=3D WAIT_OBJECT_0=20
      =
+1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;=20
      PWORK_ITEM=20
      =
pWorkItem;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;=20
      PLIST_ENTRY=20
      =
pList;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
EnterCriticalSection(&amp;pThreadPool-&gt;WorkItemLock);<BR>&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
_ASSERT(!IsListEmpty(&amp;pThreadPool-&gt;WorkItemHeader));<BR>&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;=20
      pList =3D=20
      =
RemoveHeadList(&amp;pThreadPool-&gt;WorkItemHeader);<BR>&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
LeaveCriticalSection(&amp;pThreadPool-&gt;WorkItemLock);<BR>&nbsp;&nbsp;<=
BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;=20
      pWorkItem =3D CONTAINING_RECORD(pList, WORK_ITEM,=20
      =
List);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;=20
      =
pWorkItem-&gt;UserProc(pWorkItem-&gt;UserParam);<BR>&nbsp;&nbsp;<BR>&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;=20
      =
InterlockedDecrement(&amp;pThreadPool-&gt;WorkItemCount);<BR>&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =

      =
free(pWorkItem);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;=20
      =
}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;=20
      =
else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;=20
      =
_ASSERT(0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      }<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return=20
      0;<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp; BOOL=20
      InitializeThreadPool(PTHREAD_POOL pThreadPool, LONG=20
      ThreadNum)<BR>&nbsp;&nbsp; =
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      pThreadPool-&gt;QuitEvent =3D CreateEvent(NULL, TRUE, FALSE,=20
      NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      pThreadPool-&gt;WorkItemSemaphore =3D CreateSemaphore(NULL, 0, =
0x7FFFFFFF,=20
      NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      pThreadPool-&gt;WorkItemCount =3D =
0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
InitializeListHead(&amp;pThreadPool-&gt;WorkItemHeader);<BR>&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;=20
      =
InitializeCriticalSection(&amp;pThreadPool-&gt;WorkItemLock);<BR>&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      pThreadPool-&gt;ThreadNum =3D=20
      ThreadNum;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      pThreadPool-&gt;ThreadsArray =3D (HANDLE*)malloc(sizeof(HANDLE) *=20
      =
ThreadNum);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      for(int i=3D0; i&lt;ThreadNum; =
i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      pThreadPool-&gt;ThreadsArray[i] =3D CreateThread(NULL, 0, =
WorkerThread,=20
      pThreadPool, 0, NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      }<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return=20
      TRUE;<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp; VOID=20
      DestroyThreadPool(PTHREAD_POOL pThreadPool)<BR>&nbsp;&nbsp;=20
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
SetEvent(pThreadPool-&gt;QuitEvent);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;=20
      for(int i=3D0; i&lt;pThreadPool-&gt;ThreadNum;=20
      i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      WaitForSingleObject(pThreadPool-&gt;ThreadsArray[i],=20
      =
INFINITE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;=20
      =
CloseHandle(pThreadPool-&gt;ThreadsArray[i]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;=20
      }<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
free(pThreadPool-&gt;ThreadsArray);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;=20
      =
CloseHandle(pThreadPool-&gt;QuitEvent);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;=20
      =
CloseHandle(pThreadPool-&gt;WorkItemSemaphore);<BR>&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;=20
      =
DeleteCriticalSection(&amp;pThreadPool-&gt;WorkItemLock);<BR>&nbsp;&nbsp;=
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
while(!IsListEmpty(&amp;pThreadPool-&gt;WorkItemHeader))<BR>&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;=20
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      PWORK_ITEM=20
      =
pWorkItem;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;=20
      PLIST_ENTRY=20
      =
pList;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR=
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      pList =3D=20
      =
RemoveHeadList(&amp;pThreadPool-&gt;WorkItemHeader);<BR>&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      pWorkItem =3D CONTAINING_RECORD(pList, WORK_ITEM,=20
      =
List);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR=
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      free(pWorkItem);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
}<BR>&nbsp;&nbsp;=20
      }<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp; BOOL PostWorkItem(PTHREAD_POOL=20
      pThreadPool, WORK_ITEM_PROC UserProc, PVOID =
UserParam)<BR>&nbsp;&nbsp;=20
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PWORK_ITEM pWorkItem =3D =

      =
(PWORK_ITEM)malloc(sizeof(WORK_ITEM));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;=20
      if(pWorkItem =3D=3D=20
      =
NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      return =
FALSE;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      pWorkItem-&gt;UserProc =3D =
UserProc;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      pWorkItem-&gt;UserParam =3D=20
      UserParam;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =

      =
EnterCriticalSection(&amp;pThreadPool-&gt;WorkItemLock);<BR>&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;=20
      InsertTailList(&amp;pThreadPool-&gt;WorkItemHeader,=20
      &amp;pWorkItem-&gt;List);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
LeaveCriticalSection(&amp;pThreadPool-&gt;WorkItemLock);<BR>&nbsp;&nbsp;<=
BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
InterlockedIncrement(&amp;pThreadPool-&gt;WorkItemCount);<BR>&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      ReleaseSemaphore(pThreadPool-&gt;WorkItemSemaphore, 1,=20
      NULL);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
return=20
      TRUE;<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp; VOID=20
      UserProc1(PVOID dwParam)<BR>&nbsp;&nbsp;=20
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      WorkItem(dwParam);<BR>&nbsp;&nbsp; =
}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp; void=20
      TestSimpleThreadPool(BOOL bWaitMode, LONG =
ThreadNum)<BR>&nbsp;&nbsp;=20
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; THREAD_POOL=20
      =
ThreadPool;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;=20
      InitializeThreadPool(&amp;ThreadPool,=20
      =
ThreadNum);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;=20
      CompleteEvent =3D CreateEvent(NULL, FALSE, FALSE,=20
      NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BeginTime =3D=20
      GetTickCount();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ItemCount =
=3D=20
      20;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
for(int i=3D0;=20
      i&lt;20; i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      PostWorkItem(&amp;ThreadPool, UserProc1,=20
      (PVOID)bWaitMode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;=20
      WaitForSingleObject(CompleteEvent,=20
      INFINITE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
CloseHandle(CompleteEvent);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;=20
      DestroyThreadPool(&amp;ThreadPool);<BR>&nbsp;&nbsp;=20
      }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
      =
=CE=D2=C3=C7=B0=D1=B9=A4=D7=F7=CF=EE=C4=BF=B7=C5=B5=BD=D2=BB=B8=F6=B6=D3=C1=
=D0=D6=D0=A3=AC=D3=C3=D2=BB=B8=F6=D0=C5=BA=C5=C1=BF=CD=A8=D6=AA=CF=DF=B3=CC=
=B3=D8=A3=AC=CF=DF=B3=CC=B3=D8=D6=D0=C8=CE=D2=E2=D2=BB=B8=F6=CF=DF=B3=CC=C8=
=A1=B3=F6=B9=A4=D7=F7=CF=EE=C4=BF=C0=B4=D6=B4=D0=D0=A3=AC=D6=B4=D0=D0=CD=EA=
=B1=CF=D6=AE=BA=F3=A3=AC=CF=DF=B3=CC=B7=B5=BB=D8=CF=DF=B3=CC=B3=D8=A3=AC=BC=

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲线精品一区二区三区| 另类小说色综合网站| 亚洲在线观看免费| 久久国产麻豆精品| 欧美日韩中文字幕一区二区| ww久久中文字幕| 日韩精品一区第一页| 波多野结衣一区二区三区 | 一区二区三区电影在线播| 久久精品99国产国产精| 色女孩综合影院| 国产婷婷色一区二区三区四区| 日韩国产在线观看一区| av电影一区二区| 久久久久久久久岛国免费| 婷婷久久综合九色综合绿巨人| 成人动漫一区二区在线| 久久久久久久电影| 麻豆精品一区二区三区| 欧美天堂一区二区三区| 亚洲色图另类专区| 国产成人免费在线| 精品人伦一区二区色婷婷| 天堂成人国产精品一区| 欧洲亚洲精品在线| 一区二区三区四区在线播放 | 激情六月婷婷久久| 9191久久久久久久久久久| 一区二区在线免费| 99久久免费精品高清特色大片| 国产女人aaa级久久久级 | 欧美偷拍一区二区| 一区二区三区在线免费| 一本色道综合亚洲| 亚洲视频一区在线观看| 91免费在线看| 一区二区三区四区高清精品免费观看 | 日韩成人av影视| 在线播放一区二区三区| 日韩av在线发布| 日韩视频免费观看高清完整版| 蜜桃91丨九色丨蝌蚪91桃色| 91精品国产免费久久综合| 免费三级欧美电影| 日韩欧美国产一区二区三区 | **性色生活片久久毛片| 国产乱子伦视频一区二区三区| 精品国产91亚洲一区二区三区婷婷| 日本亚洲天堂网| 日韩欧美第一区| 国产一区不卡在线| 国产精品女上位| 91伊人久久大香线蕉| 亚洲国产精品麻豆| 日韩精品专区在线| 成人亚洲一区二区一| 国产精品成人在线观看| 91丨九色porny丨蝌蚪| 亚洲国产日韩av| 日韩欧美一级精品久久| 国产成人一区二区精品非洲| 欧美国产国产综合| 欧美在线免费观看亚洲| 麻豆国产精品视频| 国产精品久久影院| 欧美日韩激情一区二区| 精品一区二区在线观看| 国产精品国产馆在线真实露脸| 91色porny在线视频| 日韩—二三区免费观看av| 国产欧美日韩一区二区三区在线观看| 99久久精品一区二区| 日本sm残虐另类| 国产精品乱子久久久久| 欧美日本国产一区| 成人美女视频在线看| 午夜精品视频一区| 国产精品三级av在线播放| 欧美日韩精品免费| av在线播放一区二区三区| 香蕉影视欧美成人| 国产丝袜欧美中文另类| 欧美精品免费视频| 99国产精品久久久久久久久久 | 日韩欧美黄色影院| 91福利在线导航| 国产在线精品免费| 亚洲一二三四在线观看| 久久精品视频一区二区三区| 欧美精品一区二区三区高清aⅴ| 99免费精品视频| 国产麻豆精品久久一二三| 亚洲成人一区在线| 亚洲欧美激情视频在线观看一区二区三区| 日韩欧美亚洲另类制服综合在线| 91小宝寻花一区二区三区| 男人的天堂亚洲一区| 亚洲精品免费播放| 国产精品毛片高清在线完整版| 日韩美女视频在线| 91精品免费观看| 日本久久一区二区三区| 成人美女在线视频| 夫妻av一区二区| 国产精品18久久久久久久网站| 天天做天天摸天天爽国产一区| 亚洲三级理论片| 国产精品久久99| 日本一区二区三区四区在线视频| 日韩欧美一区二区三区在线| 91精品国产综合久久久久久久久久 | 亚洲欧洲国产日本综合| 久久久五月婷婷| 久久久三级国产网站| 久久精品人人做人人爽97| 日韩视频一区二区三区| 欧美一级二级在线观看| 日韩一级成人av| 日韩一区二区视频在线观看| 日韩一区二区免费电影| 日韩视频在线一区二区| 精品国产乱码91久久久久久网站| 日韩欧美一区二区三区在线| 久久这里只有精品首页| 久久免费电影网| 中文字幕中文在线不卡住| 自拍偷拍欧美激情| 亚洲网友自拍偷拍| 天使萌一区二区三区免费观看| 蜜桃视频在线观看一区二区| 另类小说欧美激情| 国产精品综合久久| 99riav久久精品riav| 欧美亚洲高清一区二区三区不卡| 欧美日韩另类一区| 欧美成人精品3d动漫h| 国产亚洲一二三区| 亚洲精选免费视频| 午夜伦理一区二区| 久久er99精品| av在线不卡网| 欧美精品自拍偷拍动漫精品| 6080午夜不卡| 久久综合av免费| 一区二区三区在线视频免费 | 天堂资源在线中文精品| 久久精品国内一区二区三区| 国产在线一区观看| 成人福利视频在线| 欧美三级视频在线| 精品国产第一区二区三区观看体验| 国产亚洲欧美日韩日本| 一区二区三区四区蜜桃| 精品一区二区在线免费观看| 成人av电影在线观看| 欧美三级视频在线播放| 国产欧美视频在线观看| 亚洲一区二区精品久久av| 国产精品538一区二区在线| 欧美性色黄大片手机版| 久久久久久久久一| 午夜不卡av免费| 国产成人精品三级| 欧美一区二区三区四区久久| 中文字幕一区在线观看| 美女免费视频一区| 一本一道综合狠狠老| 久久九九久久九九| 奇米在线7777在线精品| 91色在线porny| 久久综合狠狠综合久久激情 | 国产成人啪免费观看软件| 欧美日韩你懂的| 成人免费在线视频观看| 免费欧美高清视频| 欧美午夜一区二区三区| 日本一区二区综合亚洲| 久99久精品视频免费观看| 欧美亚洲国产一卡| 亚洲美女在线国产| 波多野结衣的一区二区三区| 日韩视频不卡中文| 亚洲国产日韩综合久久精品| 成人网在线免费视频| 精品国产三级a在线观看| 亚洲国产成人av网| 欧美在线观看你懂的| 亚洲欧美日韩中文字幕一区二区三区| 国产专区欧美精品| 欧美电影免费观看高清完整版在线观看| 一区二区三区日韩精品视频| 色婷婷久久综合| 亚洲色图都市小说| 在线一区二区视频| 亚洲黄色免费网站| 欧日韩精品视频| 亚洲午夜影视影院在线观看| 在线免费观看日本欧美| 一区二区三区视频在线观看| 欧美视频日韩视频|