int count [200];
int g_sum = 200;
CRITICAL_SECTION g_cs;
DWORD __stdcall SecondThread(void*);
DWORD __stdcall FirstThread(void*)
{
EnterCriticalSection(&g_cs);
DWORD d;
CreateThread(0, 0, SecondThread, 0, 0, &d);
for(int n = 1; n<= g_sum; n++)
{
Sleep(1);
count[n-1] = n;
}
LeaveCriticalSection(&g_cs);
return 0;
}
DWORD __stdcall SecondThread(void*)
{
EnterCriticalSection(&g_cs);
for(int n = 1; n<= g_sum; n++)
cout<< count[n-1] <<"\t";
LeaveCriticalSection(&g_cs);
return 0;
}
void main()
{
::_wsetlocale(LC_ALL, L"");
InitializeCriticalSection(&g_cs); DWORD d;
CreateThread(0, 0, FirstThread, 0, 0, &d);
Sleep(2000);
system("pause");
}

解决方案 »

  1.   

    这是最正常的效果啊,
    程序没有退出,只是运行到system("pause");而已了。因为主进程运行的速度非常快。比自己建立线程运行快呀
    CreateThread之后大家就2边一起运行了
      

  2.   

    这是正常的,它们的先后顺序不一定的,
    楼主用了
         CreateThread(0, 0, FirstThread, 0, 0, &d);
    创建线程,我设创建的这个线程为A线程。
    创建线程执行完后,主线程 Sleep(2000),而在主线程Sleep执行完之前,A线程就执行完了,就能看见全部输出结果。
    相反,如果A线程抢不到资源,那么主线程先执行,自然,就会先看见system("pause")了。如果楼主想达到先看见A线程,可以用
    // 创建并记录线程
    HANDLE threadTemp = CreateThread(0, 0, FirstThread, 0, 0, &d);
    // 等待线程结束
    WaitForSingleObject(threadTemp, INFINITE);
    // 关闭句柄
    CloseHandle(threadTemp);
    最后再 system("pause");也就是说:
    void main()
    {
        ::_wsetlocale(LC_ALL, L"");
        InitializeCriticalSection(&g_cs);    DWORD d;
         // 创建并记录线程
         HANDLE threadTemp = CreateThread(0, 0, FirstThread, 0, 0, &d);
         // 等待线程结束
         WaitForSingleObject(threadTemp, INFINITE);
         // 关闭句柄
         CloseHandle(threadTemp);
        system("pause");
    }