关于信号量的问题。。。。 如果trigger在主线程中执行,内部不执行完如何进行下一次执行 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 抱歉版主,我忘记说了,不在一个线程里,函数trigger不在主函数里面,这个触发和执行函数不在一个线程里面。多线程同步才用le 信号量。全部是这样的:UINT ThreadProc(...){ while(1) { UINT uWait=::WaitForSingleObject(IEvent,INFINITE); if ( uWait == WAIT_OBJECT_0 ) { processA(); } }} 你的trigger是个线程函数吗?trigger函数当中用到线程了吗??如果不是或没有,你的那个函数没有任何意义啊——即使该函数被调用多次,trigger函数是同步调用的,即有先后顺序的,当前没执行完怎么可能就进入下一次的执行了呢? 抱歉版主,我忘记说了,不在一个线程里,函数trigger不在主函数里面,这个触发和执行函数不在一个线程里面。多线程同步才用le 信号量。全部是这样的:UINT ThreadProc(...){ while(1) { UINT uWait=::WaitForSingleObject(IEvent,INFINITE); if ( uWait == WAIT_OBJECT_0 ) { processA(); } }}在线程函数中的话就没有问题,会是一个一个执行,不会并发。 WaitForSingleObject你这个不是已经做了判断了吗?如果不执行官完这个就不会返回,自然就也不会进入if ( uWait == WAIT_OBJECT_0 ) 抱歉版主,我忘记说了,不在一个线程里,函数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);} 我主帖没写好,是这样的:监视线程中有个触发函数void trigger(){setevent(IEvent);}在另外一个处理线程中,有一个循环一直等待信号量。while(1){UINT uWait=::WaitForSingleObject(IEvent,INFINITE);if ( uWait == WAIT_OBJECT_0 ){ processA(); }}我现在的疑问是,trigger的速度很快,而processA()有时候很慢,如果上一次的processA()还未完成,下一次的trigger又来了该程序会作如何反应,processA()是一个函数不是线程。 我主帖没写好,是这样的:监视线程中有个触发函数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()还未执行完,就不会进入下一次的循环呀 我主帖没写好,是这样的:监视线程中有个触发函数void trigger(){setevent(IEvent);}在另外一个处理线程中,有一个循环一直等待信号量。while(1){UINT uWait=::WaitForSingleObject(IEvent,INFINITE);if ( uWait == WAIT_OBJECT_0 ){ processA(); }}我现在的疑问是,trigger的速度很快,而processA()有时候很慢,如果上一次的processA()还未完成,下一次的trigger又来了该程序会作如何反应,processA()是一个函数不是线程。应用程序处理你的情况,怎么做都可以,比如,你不想丢掉未完成的处理,可以将触发的信息保存在队列中逐一处理;如果新的触发必须处理,也可以直接中止未完成的处理,转而处理新触发,等等,这些都要看你的工程设计要求了,而程序中的部分只是一点技巧而已。 (socket)为什么与一个端口为0的ip 建立连接没有返回错误 应该怎么做才能在重画窗口时候不丢失原来画的图片? 5K 的工资请我做他们的网管,我拒绝后他居然恼羞成怒………… 为什么位图和菜单不能显示,windows api问题 如何得到控件(比如编辑控件)在dialog中的相对位置? 怎么样修改EXE文件的资源? 一道街析曲线问题! 请教:读文件时,为什么会显示乱码呢? 我想让MDI窗体生成的子窗体没有最大化,最小化,关闭 一个送分提:如何在程序中重新调用OnInitDialog()函数? GetPrivateProfileString 最近写代码写的爽吗?
抱歉版主,我忘记说了,不在一个线程里,函数trigger不在主函数里面,这个触发和执行函数不在一个线程里面。多线程同步才用le 信号量。
全部是这样的:
UINT ThreadProc(...)
{
while(1)
{
UINT uWait=::WaitForSingleObject(IEvent,INFINITE);
if ( uWait == WAIT_OBJECT_0 )
{
processA();
}
}
}
抱歉版主,我忘记说了,不在一个线程里,函数trigger不在主函数里面,这个触发和执行函数不在一个线程里面。多线程同步才用le 信号量。
全部是这样的:
UINT ThreadProc(...)
{
while(1)
{
UINT uWait=::WaitForSingleObject(IEvent,INFINITE);
if ( uWait == WAIT_OBJECT_0 )
{
processA();
}
}
}
在线程函数中的话就没有问题,会是一个一个执行,不会并发。
抱歉版主,我忘记说了,不在一个线程里,函数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);
}
我主帖没写好,是这样的:监视线程中有个触发函数
void trigger()
{
setevent(IEvent);
}
在另外一个处理线程中,有一个循环一直等待信号量。
while(1)
{
UINT uWait=::WaitForSingleObject(IEvent,INFINITE);
if ( uWait == WAIT_OBJECT_0 )
{
processA();
}
}
我现在的疑问是,trigger的速度很快,而processA()有时候很慢,如果上一次的processA()还未完成,下一次的trigger又来了该程序会作如何反应,processA()是一个函数不是线程。
我主帖没写好,是这样的:监视线程中有个触发函数
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()还未执行完,就不会进入下一次的循环呀
我主帖没写好,是这样的:监视线程中有个触发函数
void trigger()
{
setevent(IEvent);
}
在另外一个处理线程中,有一个循环一直等待信号量。
while(1)
{
UINT uWait=::WaitForSingleObject(IEvent,INFINITE);
if ( uWait == WAIT_OBJECT_0 )
{
processA();
}
}
我现在的疑问是,trigger的速度很快,而processA()有时候很慢,如果上一次的processA()还未完成,下一次的trigger又来了该程序会作如何反应,processA()是一个函数不是线程。
应用程序处理你的情况,怎么做都可以,比如,你不想丢掉未完成的处理,可以将触发的信息保存在队列中逐一处理;如果新的触发必须处理,也可以直接中止未完成的处理,转而处理新触发,等等,这些都要看你的工程设计要求了,而程序中的部分只是一点技巧而已。