本帖最后由 thdxs 于 2012-12-07 00:10:56 编辑

解决方案 »

  1.   

    不用循环,处理完数据就结束了,WaitForSingleObject(hth1,INFINITE),就有效了。unsigned int  __stdcall  f(void *)
     {
        
             cout<<"thread is doing"<<endl;               
              return 1; 
      

  2.   

    重复处理数据应该这样“#include <iostream> 
    #include <windows.h> 
    #include <process.h> 
    using namespace std; 
    Event fevent;//事件
    int data=0;//参数
    bool flag=1;
    unsigned int __stdcall  f(void *);//线程调用的函数 bool flag=true;
    int main() {    
    cout<<"this is main before thread"<<endl;    
    HANDLE   hth1;
    hth1 = (HANDLE)_beginthreadex( NULL,   //创建线程     
    0,                
    f,   
    data,//参数
    CREATE_SUSPENDED,      
    NULL);   
    ResumeThread(hth1); 
    while(1){
    data=999;//根据需要改变参数,分配任务
    SetEvent(fevent);
    } flag=0;//终止线程。
    WaitForSingleObject(hth1,INFINITE);//等待线程结束 
       
    cout<<"this is main after thread"<<endl;   
    CloseHandle(hth1);  
    return 0; 
    }  
    unsigned int  __stdcall  f(void *) 

    while(flag)   
    {   
    WaitForSingleObject(fevent,INFINITE);//等待主线程通知; 
    cout<<"thread is doing"<<endl;      
    Sleep(1000);    
    }    
    return 1;
      

  3.   

     感谢hztj2005 的回答我学习一下 不会再来请教各位
      

  4.   

    楼上的楼上 你的程序 运行不了  
    错误如下:Compiling...
    tets.cpp
    e:\vctest\thread_5\tets.cpp(6) : error C2146: syntax error : missing ';' before identifier 'fevent'
    e:\vctest\thread_5\tets.cpp(6) : error C2501: 'Event' : missing storage-class or type specifiers
    e:\vctest\thread_5\tets.cpp(6) : fatal error C1004: unexpected end of file found
    Error executing cl.exe.thread_5.exe - 3 error(s), 0 warning(s)
      

  5.   


    flag感觉多余另外:flag明显错误, 多个线程操作 变量flag.显然不对幸亏是一汇编指令。
      

  6.   

    我一时没记清楚,用CEvent fevent,看这里:
    http://hi.baidu.com/jimoguilai2012/item/b78b2ff60efde90cc6dc45dc
      

  7.   

    回复5楼:flag是必须的,通知所有子线程整个工作完成了。结束while循环。如果子线程不修改flag,是可以共用的。另外,线程参数是一个32bit的数据,可以是整数,也可以是一个大数据的地址。
      

  8.   

     while(1){         data=999;//根据需要改变参数,分配任务    
            fevent.SetEvent(); //改为CEvent后用成员函数 
           Sleep(2000);//2秒检查一次,避免占用cpu   }