写了一个最简单的命令行多线程程序
一个main函数建立两个线程,并运行这两个线程。
两个线程只是
whie(true)
{
cout<<"test Thread1" ;
Sleep(1000);
}
之类的。程序编译正常,但每次运行的时候并不是立刻将两个线程的cout结果输出到屏幕上
而是要等一些时间,一次输出很多多次循环的运行结果,不知道是什么原因???

解决方案 »

  1.   

    原程序如下:
    #include "stdafx.h"DWORD WINAPI MTOne(LPVOID param); 
    DWORD WINAPI MTTwo(LPVOID param); int main(int argc, char* argv[])
    {
    int inp=0;
      HANDLE hand=CreateThread (NULL, 5, MTOne, (void*)&inp, CREATE_SUSPENDED, NULL);
      HANDLE hand2=CreateThread (NULL, 0, MTTwo, (void*)&inp, CREATE_SUSPENDED, NULL);
      cout<<"create Thread OK"<<"   "<<hand<<" "<<hand2<<endl;
      int Isrun=0;  while(true){   
        cin>>inp;
        if(inp==1) //运行线程
        {
    if(Isrun==0){
    Isrun=1;
    cout<<ResumeThread(hand)<<"  ";
    cout<<ResumeThread(hand2)<<endl;
    }
       }
    else if(inp==2){
    cout<<"break Thread"<<endl;
    break;
    }   else if(inp=3) //暂停线程
       {
       if(Isrun==1){
       Isrun=0;
       cout<<SuspendThread(hand)<<"   ";
       cout<<SuspendThread(hand2)<<endl;
       }
       }  };  cout<<"停止运行线程:"<<TerminateThread(hand,1)<<endl;
      cout<<"停止运行线程:"<<TerminateThread(hand2,1)<<endl;
    printf("Hello World!\n");
    return 0;
    }DWORD WINAPI MTOne(LPVOID param){
      while(true)
      {
        Sleep(1000);
        cout<<"hi! ";
      }
      return 0;
    } DWORD WINAPI MTTwo(LPVOID param){
      while(true)
      {
        Sleep(3000);
        cout<<"joy! ";
      }
      return 0;
    }
      

  2.   

    DWORD WINAPI MTOne(LPVOID param){
      while(true)
      {
        Sleep(1000);
        cout<<"hi! ";
      }
      return 0;
    } DWORD WINAPI MTTwo(LPVOID param){
      while(true)
      {
        Sleep(3000);
        cout<<"joy! ";
      }
      return 0;
    }
    你的这两个线程函数怎么是死循环呢!
      

  3.   

    没有关系阿
    我的main函数可以控制阿
    当用户输入1,开始运行这两个函数
    当用户输入2,就停止线程。
          输入3,暂停线程
    问题在于当我输入1,程序不会立刻将两个线程运行结果打印出来,
    当我输入2的时候程序才会将前面的运行结果打印出来,给我的感觉是向屏幕输出的数据被缓存了,没有立刻输出的。