16,472
社区成员
发帖
与我相关
我的任务
分享
CMainFrame成员变量CRealValue IEDValue;//实时的遥测或遥信值
//从共享内存中得到遥测遥信数据
bool CMainFrame::DealComData()
{
CRealValue recvData;
////////第一个循环///
while(m_bThread_RecvData)//从别的地方得到类对象IEDValue值变化的循环
{
ShareMemComCli.GetMemData(&recvData);/
CopyMemory(&IEDValue,&recvData,sizeof(CRealValue));//把得到的实时新数据给对象IEDValue,会使其值不断变化 这里就是数据的变化来源
IedId=IEDValue.IedNum;
//有遥测数据
if((IedId>0) && (IEDValue.type == YC_TYPE))
{
storeCurveData();//保存数据到数据库中
}
}
return true;
}
// 保存曲线数据
BOOL CMainFrame::storeCurveData()
{
....
static int Minute = 0;
int timeM;
timeM = GetTimeValue(Minute,TRUE);
if(timeM >5)//自定义时间定时,5分钟一次
{
PostMessage(WM_YC_DATA,0,0);
}
return true;
}
//提取保存5分钟遥测数据到数据库中
LESULT CMainFrame::storeYcData(WPARAM wParam,LPARAM lParam)
{
.....
///第二个循环/////
while(count)
{
CString strYc =pApp->YcConfigeIed.GetAt(i);
int YcNum =GetNumFromStr(strYc,0,_T(":"));
IedNum = IEDValue.IedNum;///问题就出现在这里,IEDValue里面的值一直都没变,使得这个循环变成死循环了,使得除了这个循环外其他的程序都不执行了
if(YcNum == IedNum)//当装置号相同
{
.......
}
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
return FALSE;
}
return TRUE;
}
int a()
{
//第一个循环
while(1)
{
b();
}
}
int b()
{
PostMessage(WM_YC_DATA,0,0);
}
//WM_YC_DATA的自定义消息响应函数
int c()
{
//第二个循环
while(1)
{
}
}
是不是程序在 c()中第二个死循环运行中,第一个a()中的程序就不会运行了,PostMessage不是发送之后继续运行原来的程序(即继续运行a()的程序)的吗?
给位大神指教static UINT ComThreadFun (LPVOID pParam)
{
CMainFrame *pFrame=(CMainFrame *) pParam;
pFrame->DealComData();
return 0;
}