纠结,还是事件使2个线程同步问题:去了第二个线程,回不了第一个线程 本帖最后由 chenquangobeijing 于 2012-09-11 22:38:09 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to xu561865: 可是Manipulator_Move_thread这个线程没执行完,只执行了一部分语句。 因为线程的执行你是无法预计的(除非使用了线程同步的方法),所以这里有问题: if(isDS==TRUE && isDR1==FALSE) //第3个执行 { Sleep(10); isDR1=TRUE; SetEvent(Xdlg->M_Event); } //执行完上一句之后,可能会继续执行下一句,if语句为假,红色部分全都不执行 if(isDR2==FALSE && isMT2==TRUE) //第5个执行,断点在这点不执行,应该去第4个执行处的 { DWORD dw6=WaitForSingleObject(Xdlg->XYZ_Event,INFINITE); if(dw6==WAIT_OBJECT_0) { Sleep(10); isDR2=TRUE; SetEvent(Xdlg->M_Event); } } if(isDS==TRUE && isDR1==TRUE && isDR2==TRUE) ++i; } to agoago_2009: 我没看懂,不知道到底怎么改?方便留下你的QQ号吗? 最简单的就是,把if前加while循环:while(1){ if(isDR2==FALSE && isMT2==TRUE) //第5个执行,断点在这点不执行,应该去第4个执行处的{DWORD dw6=WaitForSingleObject(Xdlg->XYZ_Event,INFINITE);if(dw6==WAIT_OBJECT_0) { Sleep(10);isDR2=TRUE; SetEvent(Xdlg->M_Event); break;}} if(isDS==TRUE && isDR1==TRUE && isDR2==TRUE) ++i; } 实现文件夹选择 MFC的托盘问题 VC中关于ADO 修改数据库的操作问题!~~~~~~ 请问如何获得本机的IP地址? 很简单的,这有两句我不明? 谁能给些禁止一些网站弹出窗口(广告)的资料!! soft_ICE?请教? 文件格式问题. 打开图像窗口大小的问题 CToolBar重载OnPait问题 MFC中如何实现Tab控件里子对话框里的控件跟着对主话框伸缩而改变位置 菜鸟求指教MFV VC++6.0:代码一样,编译无错但运行之后没达到预期效果、成员变量“.(点)”后没出现成员函数、代码中几个问题
to xu561865:
可是Manipulator_Move_thread这个线程没执行完,只执行了一部分语句。
if(isDS==TRUE && isDR1==FALSE) //第3个执行
{
Sleep(10);
isDR1=TRUE;
SetEvent(Xdlg->M_Event);
} //执行完上一句之后,可能会继续执行下一句,if语句为假,红色部分全都不执行 if(isDR2==FALSE && isMT2==TRUE) //第5个执行,断点在这点不执行,应该去第4个执行处的
{
DWORD dw6=WaitForSingleObject(Xdlg->XYZ_Event,INFINITE);
if(dw6==WAIT_OBJECT_0)
{
Sleep(10);
isDR2=TRUE;
SetEvent(Xdlg->M_Event);
}
} if(isDS==TRUE && isDR1==TRUE && isDR2==TRUE) ++i; }
to agoago_2009:
我没看懂,不知道到底怎么改?方便留下你的QQ号吗?
while(1)
{
if(isDR2==FALSE && isMT2==TRUE) //第5个执行,断点在这点不执行,应该去第4个执行处的
{
DWORD dw6=WaitForSingleObject(Xdlg->XYZ_Event,INFINITE);
if(dw6==WAIT_OBJECT_0)
{
Sleep(10);
isDR2=TRUE;
SetEvent(Xdlg->M_Event);
break;
}}
if(isDS==TRUE && isDR1==TRUE && isDR2==TRUE) ++i; }