首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请各位帮忙看下状态为什么不变(Timer与Sleep函数)

2012-03-03 
请各位大虾帮忙看下状态为什么不变(Timer与Sleep函数)下面是程序代码段,原意为:当调用SendData函数时,当g_

请各位大虾帮忙看下状态为什么不变(Timer与Sleep函数)
下面是程序代码段,原意为:当调用SendData函数时,当g_Sendflg   ==   ON,等待timer执行,然后g_Sendflg   ==OFF,g_blSend=TRUE。但现在SLEEP后,不执行TIMER.

SendData(short   size,   char   *data)
{
if(g_wdState   ==   AIDLE   ||   size   >   BUFFERMAX){
return   IDC_FAILED;
}
if(g_wdState   ==   CMDWAITE){//指示待ち状態だけ送信
//送信内容記憶
memset(g_buff,   0,   sizeof(g_buff));
memcpy(g_buff,   data,   size);
g_wdCnt   =   size;
g_Sendflg   =   ON;
//while(g_Sendflg   ==   ON){//結果を待つ
Sleep(100);
//}
if(g_blSend){//送信完了
return   IDC_SUCCEEDED;
}else{
return   IDC_FAILED;
}
}
//他の状態
return   IDC_RECEVING;
}

void   CALLBACK   TimerProc(UINT   nIDEvent)
{
unsigned   long   length   =   0;
BOOL   blrlt   =   FALSE;
MSG     msg;
try{
::GetMessage(&msg,   NULL,   0,   0);
::DispatchMessage(&msg);
//受信
g_sts   =   0;
blrlt   =   ReadFile(g_hCom,&g_sts,sizeof(g_sts),&length,NULL);
//カウントインクリメント
g_intCnter   ++;
//送信フラグON
if(g_Sendflg   ==   ON){
g_sts   =   0;
g_szCmd   =   g_buff[STX];
//送信
g_blSend   =   WriteFile(g_hCom,g_buff,g_wdCnt,&length,NULL);
if(g_blSend){//送信成功
g_wdState   =   RECVING;
g_intCnter   =   0;
}
g_Sendflg   =   OFF;

[解决办法]
没看代码,但是在主线程中sleep一辈子也是等不到wm_timer的,当然,也等不到任何其它消息。
[解决办法]
同意一楼的

你的程序逻辑有点问题,应该把发送部分独立在一个函数里,SendData和TierProc都来调用才对
[解决办法]
你到底是想用Timer,每到一定的时间间隔才发送, 即使手动调SendData? 是不是这样?
如果是这样,你完全可以用一个队列来保存你要发送的信息,调用SendData的时候只是把这些信息加到队列里去,在响应Timer的时候从队列里把这些命令读出来发送

在一个线程里是没有一个函数等待另外一个函数的说法的. 要不你就用MultiMedia Timer, 并使用线程同步的方式来达到你的要求. 问题就负责化了

你的程序执行逻辑很有问题

热点排行