先贴下代码。。#include <iostream>
#include <windows.h>
using namespace std;
#define HIGHEST_THREAD    0x00
#define ABOVE_AVE_THREAD  0x3F
#define NORMAL_THREAD     0x7F
#define BELOW_AVE_THREAD  0xBF
#define LOWEST_THREAD     0xFF
HANDLE _hThread[5];
void ThreadProc (DWORD *ThreadArg);
main(){
int i;
DWORD ThreadID[5];
static DWORD  ThreadArg[5] = {HIGHEST_THREAD,    // 0x00
                              ABOVE_AVE_THREAD,  // 0x3F
                              NORMAL_THREAD,     // 0x7F
                              BELOW_AVE_THREAD,  // 0xBF
                              LOWEST_THREAD      // 0xFF
                             }; 
for(i=0; i<5; i++)   
    _hThread[i] = CreateThread(NULL,
                                    0,
                                    (LPTHREAD_START_ROUTINE)ThreadProc,
                                    &ThreadArg[i],
                                    0,
                                    &ThreadID[i]);      SetThreadPriority(_hThread[0], THREAD_PRIORITY_HIGHEST);
      SetThreadPriority(_hThread[1], THREAD_PRIORITY_ABOVE_NORMAL);
      SetThreadPriority(_hThread[2], THREAD_PRIORITY_NORMAL);
      SetThreadPriority(_hThread[3], THREAD_PRIORITY_BELOW_NORMAL);
      SetThreadPriority(_hThread[4], THREAD_PRIORITY_LOWEST);
  for(i=0;i<5;i++){
  ResumeThread(_hThread[i]);
  }}
void ThreadProc (DWORD *ThreadArg)
{
int j=0,i;
if(*ThreadArg==HIGHEST_THREAD){
for(j=0;j<100;j++){
cout<<'1';
for(i=0;i<1000;i++){}
}
}
if(*ThreadArg==ABOVE_AVE_THREAD){
for(j=0;j<100;j++){
cout<<'2';
for(i=0;i<1000;i++){}
}
}

为什么我明明是循环了100次,当是输出是还是只输出了几个数而已?

解决方案 »

  1.   


    main(){ 
      ......
      for(i=0;i <5;i++){ 
      ResumeThread(_hThread[i]); 
      } 
      Sleep(5000); //等5秒看看

      

  2.   

    因为主线程已经结束了,所以子线程也就是结束了,因为要用
    main(){ 
    int i; 
    DWORD ThreadID[5]; 
    static DWORD  ThreadArg[5] = {HIGHEST_THREAD,    // 0x00 
                                  ABOVE_AVE_THREAD,  // 0x3F 
                                  NORMAL_THREAD,    // 0x7F 
                                  BELOW_AVE_THREAD,  // 0xBF 
                                  LOWEST_THREAD      // 0xFF 
                                }; 
    for(i=0; i <5; i++)  
        _hThread[i] = CreateThread(NULL, 
                                        0, 
                                        (LPTHREAD_START_ROUTINE)ThreadProc, 
                                        &ThreadArg[i], 
                                        0, 
                                        &ThreadID[i]);       SetThreadPriority(_hThread[0], THREAD_PRIORITY_HIGHEST); 
          SetThreadPriority(_hThread[1], THREAD_PRIORITY_ABOVE_NORMAL); 
          SetThreadPriority(_hThread[2], THREAD_PRIORITY_NORMAL); 
          SetThreadPriority(_hThread[3], THREAD_PRIORITY_BELOW_NORMAL); 
          SetThreadPriority(_hThread[4], THREAD_PRIORITY_LOWEST); 
      for(i=0;i <5;i++){ 
      ResumeThread(_hThread[i]); 
      }  while(1)
    {
      Sleep(1000);
    }
    }