多线程有关问题,有一个线程函数不能执行,

多线程问题,有一个线程函数不能执行,在线等,急!!!!!
#include <stdio.h>
#include <windows.h>

DWORD WINAPI myfun1(LPVOID lpParameter);                   //声明线程函数
DWORD WINAPI myfun2(LPVOID lpParameter);
static int a1 = 0;
CRITICAL_SECTION Section1;

int main()
{
HANDLE h1, h2;
InitializeCriticalSection(&Section1);                   //初始化临界区对象
h1 = ::CreateThread(NULL, 0, myfun1, NULL, 0, NULL);   //创建线程
printf("线程1开始运行!\r\n");
h2 = ::CreateThread(NULL, 0, myfun1, NULL, 0, NULL);
printf("线程2开始运行!\r\n");
::CloseHandle(h1);                                     //关闭线程句柄对象
::CloseHandle(h2);
::Sleep(10000);
printf("按q正常退出!\r\n");
if(getchar() == 'q')
{
DeleteCriticalSection(&Section1);
}
else
{
return 0;
}
return 0;
}
DWORD WINAPI myfun1(LPVOID lpParameter)
{
while(1)
{
EnterCriticalSection(&Section1);
a1++;
if(a1 < 1000)
{
::Sleep(1000);
printf("线程1正在计数%d\r\n", a1);
LeaveCriticalSection(&Section1);
}
else
{
LeaveCriticalSection(&Section1);
break;
}
}
return 0;
}
DWORD WINAPI myfun2(LPVOID lpParameter)
{
while(1)
{
EnterCriticalSection(&Section1);
a1++;
if(a1 < 1000)
{
::Sleep(1000);
printf("线程2正在计数%d\r\n", a1);
LeaveCriticalSection(&Section1);
}
else
{
LeaveCriticalSection(&Section1);
break;
}
}
return 0;
}
------解决思路----------------------
h1 = ::CreateThread(NULL, 0, myfun1, NULL, 0, NULL);   //创建线程
printf("线程1开始运行!\r\n");
h2 = ::CreateThread(NULL, 0, myfun1, NULL, 0, NULL);
printf("线程2开始运行!\r\n");

你俩线程都跑的myfun1还想咋滴?
而且像要切换的效果sleep不能写前面!!!改成下面这样的。
printf("线程2正在计数%d\r\n", a1);
LeaveCriticalSection(&Section1);
::Sleep(1000);