我调试的结果是 最终线程在producer中重复的执行if(bJudge) else SwitchToThread; 这两句  但却不切换到消费者线程代码如下 
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400 // 对应系统对应值
#endif#include<stdio.h>
#include<windows.h>
#include<process.h>
#include<stdlib.h>unsigned _stdcall ThreadProducer(void *pArgement);
unsigned _stdcall ThreadConsumer(void *pArgement);CRITICAL_SECTION cs;
int iArriay[5];
BOOL bJudge=1;int main()
{
unsigned long hThreadProducer,hThreadConsumer; InitializeCriticalSection(&cs);
hThreadProducer=_beginthreadex(NULL,0,&ThreadProducer,NULL,0,NULL);
hThreadConsumer=_beginthreadex(NULL,0,&ThreadConsumer,NULL,0,NULL); WaitForSingleObject((void *)hThreadProducer,INFINITE);
WaitForSingleObject((void *)hThreadConsumer,INFINITE);
DeleteCriticalSection(&cs);
return 0;
}unsigned _stdcall ThreadProducer(void *pArgement)
{
SYSTEMTIME sTime;
int iCount=0;
while(1)
{
if(bJudge)
{
GetLocalTime(&sTime);
EnterCriticalSection(&cs);
iArriay[iCount]=sTime.wMilliseconds;
iCount++;
if(iCount>4)
{
bJudge=0;
iCount=0;
LeaveCriticalSection(&cs);
SwitchToThread();
}
}
else
SwitchToThread();
}
return 0;
}unsigned _stdcall ThreadConsumer(void *pArgement)
{
int iCount=0;
FILE *fFile;
//char cArriay[6]={0};
while(1)
{
if(!bJudge)
{
EnterCriticalSection(&cs);
printf("消费者%d\t",iArriay[iCount]);
fFile=fopen("1.txt","at+");
//itoa(iArriay[iCount],cArriay,10);
fprintf(fFile,"%d\t",iArriay[iCount]);
iCount++;
if(iCount>4)
{
iCount=0;
bJudge=1;
fclose(fFile);
LeaveCriticalSection(&cs);
SwitchToThread();
}
}
else
SwitchToThread();
}
}