如果trigger在主线程中执行,内部不执行完如何进行下一次执行

解决方案 »

  1.   


    抱歉版主,我忘记说了,不在一个线程里,函数trigger不在主函数里面,这个触发和执行函数不在一个线程里面。多线程同步才用le 信号量。
    全部是这样的:
    UINT ThreadProc(...)
    {
    while(1)
    {
    UINT uWait=::WaitForSingleObject(IEvent,INFINITE);
    if ( uWait == WAIT_OBJECT_0 )
    {
    processA();
    }
    }
    }
      

  2.   

    你的trigger是个线程函数吗?trigger函数当中用到线程了吗??如果不是或没有,你的那个函数没有任何意义啊——即使该函数被调用多次,trigger函数是同步调用的,即有先后顺序的,当前没执行完怎么可能就进入下一次的执行了呢?
      

  3.   


    抱歉版主,我忘记说了,不在一个线程里,函数trigger不在主函数里面,这个触发和执行函数不在一个线程里面。多线程同步才用le 信号量。
    全部是这样的:
    UINT ThreadProc(...)
    {
    while(1)
    {
    UINT uWait=::WaitForSingleObject(IEvent,INFINITE);
    if ( uWait == WAIT_OBJECT_0 )
    {
    processA();
    }
    }
    }
    在线程函数中的话就没有问题,会是一个一个执行,不会并发。
      

  4.   

    WaitForSingleObject你这个不是已经做了判断了吗?如果不执行官完这个就不会返回,自然就也不会进入if ( uWait == WAIT_OBJECT_0 )
      

  5.   


    抱歉版主,我忘记说了,不在一个线程里,函数trigger不在主函数里面,这个触发和执行函数不在一个线程里面。多线程同步才用le 信号量。
    全部是这样的:
    UINT ThreadProc(...)
    {
    while(1)
    {
    UINT uWait=::WaitForSingleObject(IEvent,INFINITE);
    if ( uWait == WAIT_OBJECT_0 )
    {
    processA();
    }
    }
    }
    UINT ThreadProc(...)
    {
    ::WaitForSingleObject(IEvent,INFINITE);
    ResetEvent(IEvent);
    processA();
    SetEvent(IEvent);
    }
      

  6.   


    我主帖没写好,是这样的:监视线程中有个触发函数
    void trigger()
    {
    setevent(IEvent);
    }
    在另外一个处理线程中,有一个循环一直等待信号量。
    while(1)
    {
    UINT uWait=::WaitForSingleObject(IEvent,INFINITE);
    if ( uWait == WAIT_OBJECT_0 )
    {
    processA();
    }
    }
    我现在的疑问是,trigger的速度很快,而processA()有时候很慢,如果上一次的processA()还未完成,下一次的trigger又来了该程序会作如何反应,processA()是一个函数不是线程。
      

  7.   


    我主帖没写好,是这样的:监视线程中有个触发函数
    void trigger()
    {
    setevent(IEvent);
    }
    在另外一个处理线程中,有一个循环一直等待信号量。
    while(1)
    {
    UINT uWait=::WaitForSingleObject(IEvent,INFINITE);
    if ( uWait == WAIT_OBJECT_0 )
    {
    processA();
    }
    }
    我现在的疑问是,trigger的速度很快,而processA()有时候很慢,如果上一次的processA()还未完成,下一次的trigger又来了该程序会作如何反应,processA()是一个函数不是线程。就你这个逻辑是没有问题的,因为WaitForSingleObject和processA函数在while循环里面,即使下一次的trigger又来了,如果这时候processA()还未执行完,就不会进入下一次的循环呀
      

  8.   


    我主帖没写好,是这样的:监视线程中有个触发函数
    void trigger()
    {
    setevent(IEvent);
    }
    在另外一个处理线程中,有一个循环一直等待信号量。
    while(1)
    {
    UINT uWait=::WaitForSingleObject(IEvent,INFINITE);
    if ( uWait == WAIT_OBJECT_0 )
    {
    processA();
    }
    }
    我现在的疑问是,trigger的速度很快,而processA()有时候很慢,如果上一次的processA()还未完成,下一次的trigger又来了该程序会作如何反应,processA()是一个函数不是线程。
    应用程序处理你的情况,怎么做都可以,比如,你不想丢掉未完成的处理,可以将触发的信息保存在队列中逐一处理;如果新的触发必须处理,也可以直接中止未完成的处理,转而处理新触发,等等,这些都要看你的工程设计要求了,而程序中的部分只是一点技巧而已。