#include<iostream>
#include<windows.h>
#include "stdio.h"
using namespace std;DWORD WINAPI Threadpro1(LPVOID lp);
DWORD WINAPI Threadpro2(LPVOID lp);
DWORD dwThreadId[2];
HANDLE hthread1;
HANDLE hthread2, h, h1;
int i=0;void main()   
{
        
    //创建两个线程,每个线程给予的标志都是挂起的。
    hthread1=::CreateThread(NULL,NULL,Threadpro1,NULL,CREATE_SUSPENDED ,&dwThreadId[0]);
    cout<<"创建的第一个线程ID:"<<dwThreadId[0]<<endl;
    
    hthread2=::CreateThread(NULL,NULL,Threadpro2,NULL,CREATE_SUSPENDED ,&dwThreadId[1]);
    cout<<"创建的第二个线程ID:"<<dwThreadId[1]<<endl;
    //修改两个线程的优先级。第一线程是高于正常,第二个线程是最低
    
    ::SetThreadPriority(hthread1,THREAD_PRIORITY_ABOVE_NORMAL);
    ::SetThreadPriority(hthread2,THREAD_PRIORITY_LOWEST);
    //同时唤起两个线程
    ::ResumeThread(hthread1);
    //::WaitForSingleObject(hthread1,INFINITE);这个行我注释掉了。
    ::ResumeThread(hthread2);
    //因为设置时第二个线程低于第一个线程,所以等第二个线程结束关闭线程句柄。
    
    ::WaitForSingleObject(hthread1,INFINITE);
    
    ::CloseHandle(hthread2);
    ::CloseHandle(hthread1);
    
}
DWORD WINAPI Threadpro1(LPVOID lp)
{     while(i<200)
        
     {   ::WaitForSingleObject(  (0 = i % 10) ,INFINITE);
   
      ::SuspendThread(hthread2);  
        
        cout<<"1"<<endl;
        i++;
        ::ResumeThread(hthread2);
       Sleep(10);
    }
    
    return 0;    
}DWORD WINAPI Threadpro2(LPVOID lp)
{   
    //int i=0;
    while(i<200)
    {
       
        cout<<"2 = "<<i<< endl;
        i++;
            }
    return 0;
}要求
1.  线程1执行完 后执行线程2
2.  线程1等待一个半满信号 有信号就执行线程2 (无论2是否执行完成都要产生中断暂停执行)
3.线程1 执行完成后再次执行线程2
我要写一个数据采集程序;
先用线程1采集数据  填充缓存大约需要20ms时间这段时间不占用cpu; ;
所以一旦数据填满必须马上回到采集的线程1;执行采集程序; 
 执行完成以后利用剩余时间
我想用这段时间实现我的通信和数据处理;
类似于c语言的中断程序;
有没有哪位高手能帮我想想怎么办?最好给出点程序;必给分

解决方案 »

  1.   

    2. 线程1等待一个半满信号 有信号就执行线程1  (无论2是否执行完成都要产生中断暂停执行)打错了 不好意思;辛苦呀各位了
      

  2.   

    缓冲填满是20ms,在这个时间数量级上靠操作系统的线程调度不是太可靠。想别的办法吧。
      

  3.   

    要求
    1. 线程1执行完 后执行线程2
    2. 线程1等待一个半满信号 有信号就执行线程2 (无论2是否执行完成都要产生中断暂停执行)
    3.线程1 执行完成后再次执行线程2这要求没看明白. 1 和 3有什么区别?  1和 2不矛盾? 
      

  4.   

    要求
    1. 线程1执行完 后执行线程2
    2. 线程1等待一个半满信号 有信号就执行线程1 (无论2是否执行完成都要产生中断暂停执行)
    3.线程1 执行完成后再次执行线程2打错了 不好意思