这是一个简单的例子,麻烦给讲一下流程#include <windows.h>
#include <iostream.h>DWORD WINAPI ThreadProc(LPVOID lpParam);int index=0;
void main()
{
HANDLE hThread;
hThread=CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
CloseHandle(hThread);
while (index<1000)
{
cout<<"main thread is runing"<<endl;
}

//Sleep(5);
}DWORD WINAPI ThreadProc(LPVOID lpParam)
{
while(index<1000)
{
        cout<<"Thread1 is runing"<<endl;
index++;
//Sleep(5);
}

return 0;
}

解决方案 »

  1.   

    Thread1 is runing
    Thread1 is runing
    main thread is runing
    main thread is runing
    main thread is runing
    Thread1 is runing
    main thread is runing
    main thread is runing
    大致就这个样子, 主线程(main)和子线程(ThreadProc),谁抢到CUP时间片,谁就运行。打印出来的东西也就杂乱无须
      

  2.   

    这个没什么流程啊。就是你启用了一个新线程,在宏观上你可以认为新线程和主线程是同时运行的。微观上讲,就和楼上说的,谁抢到CPU时间,谁就运行。
      

  3.   

    这是一个简单的例子,麻烦给讲一下流程
    =====================
    因为你没有做同步处理,所以CreateThread之后,主线程和子线程到底什么时候执行哪个是随机的,完全由系统的线程调试程序控制,所以没有流程可言。
      

  4.   

    谁抢到CUP时间片,谁就运行---->每次运行的结果都不一样?用Sleep函数,报指令0x004519,内存0x00000000不能为读的错,可能会是哪些原因?
      

  5.   

    不加sleep 那么主线程获得时间片,就运行,然后工作线程获得时间片接着运行,然后主线程获得时间片继续运行,然后退出,工作线程也退出。
    有什么问题啊?
      

  6.   

    用Sleep函数,报指令0x004519,内存0x00000000不能为读的错,可能会是哪些原因?
    =============
    Sleep一般是不会出错的吧
      

  7.   

    不是sleep的问题,是你的index的问题。两个线程同时访问这个index,而又没有同步控制,就可能出现并发访问问题了。2个线程都对index进行了write操作。如果只读,或者一个读一个写,应该不会出现crash,但是结果不能预料。
      

  8.   

    sorry. 你的确是一个读一个写的。不过也许这里就是问题所在。sleep不会有问题的。
      

  9.   

    很意外这么多高手帮助……
    Thanks!
      

  10.   


    貌似是cout有关的什么overflow了
      

  11.   

    出错是,ostream::operator<< 这个函数里面overflow啦Thread1 is runing, i =946
    Thread1 is runing, i =947
    Thread1 is runing, i =948
    Thread1 is runing, i =949
    Thread1 is runing, i =950
    Thread1 is runing, i =951
    Thread1 is runing, i =952
    Thread1 is runing, i =953
    Thread1 is runing, i =954
    Thread1 is runing, i =955
    Thread1 is runing, i =956
    Thread1 is runing, i =957
    Thread1 is runing, i =958
    Thread1 is runing, i =959
    Thread1 is runing, i =960
    Thread1 is runing, i =961
    Thread1 is runing, i =962
    Thread1 is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    main thread is runing, i =963
    Thread1 is runing, i =964
    Thread1 is runing, i =965
    Thread1 is runing, i =966
    Thread1 is runing, i =967
    Thread1 is runing, i =968
    Thread1 is runing, i =969
    Thread1 is runing, i =970
    Thread1 is runing, i =971
    Thread1 is runing, i =972
    Thread1 is runing, i =973
    Thread1 is runing, i =974
    Thread1 is runing, i =975
    Thread1 is runing, i =976
    Thread1 is runing, i =977
    Thread1 is runing, i =978
    Thread1 is runing, i =979
    Thread1 is runing, i =980
    Thread1 is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    main thread is runing, i =981
    Thread1 is runing, i =982
    Thread1 is runing, i =983
    Thread1 is runing, i =984
    Thread1 is runing, i =985
    Thread1 is runing, i =986
    Thread1 is runing, i =987
    Thread1 is runing, i =988
    Thread1 is runing, i =989
    Thread1 is runing, i =990
    Thread1 is runing, i =991
    Thread1 is runing, i =992
    Thread1 is runing, i =993
    Thread1 is runing, i =994
    Thread1 is runing, i =995
    Thread1 is runing, i =996
    Thread1 is runing, i =997
    Thread1 is runing, i =998
    Thread1 is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
    main thread is runing, i =999
      

  12.   

    DWORD WINAPI ThreadProc(LPVOID lpParam)
    {
        while(index<1000)
        {
            cout<<"Thread1 is runing"<<endl;
            index++;
            //Sleep(5);
        }
        
        return 0;
    }
    如果不加Sleep会不会有问题呀?我觉得这样执行线程会不会跑太快了?至少加个Sleep(0)吧?
      

  13.   

    奥,你的程序线程运行每一次的结果肯定是不相同的啊,不要纳闷了,因为两个线程的运行相互抢夺CPU的时间片,你这个1000次,肯定不会有雷同的结果啊
    但是如果你可以加上EVENT同步的话,你可以很清晰的看到你想要的运行结果还有啊,你加上Sleep也并不好用,那样子执行的速度降慢了
      

  14.   


     Sleep(0)是交出时间片好吧?让CPU有切换的机会