多线程定时发送数据

启程电子工作室 2009-02-09 10:36:04
我要定时查询连接设备的当前状态,每500ms查询一次。如果轮询方式肯定实时性很差,我现在采用多线程方式,有多少个设备,就开启多少个线程,每个线程都是500ms执行一次发送查询命令的函数.我现在的代码如下:
void TMyMainForm::InitBackThread() //初始化每个线程
{

for(int i=0;i<PLACE_NUM;i++) //PLACE_NUM配备的多少个设备
{
if(CCleanPlace::currentPlaces[i].bUsed) //bUsed当前使用的设备数
{
TMySocketThread* pThread = new TMySocketThread(true);
pThread->InitSocket();
pThread->AddrNum = CCleanPlace::currentPlaces[i].iAddr; //从数据库中获取当前配备的所有设备的地址号
m_threadArray.push_back(pThread);
}
}
}
__fastcall TMySocketThread::TMySocketThread(bool CreateSuspended): TThread(CreateSuspended)
{

TimerY = new TTimer(NULL); //定义一个定时器,用于接收数据
TimerY->Enabled = false;
TimerY->Interval = 500;
TimerY->OnTimer = TMySocketThread::OnTimerYProc;

}
bool TMySocketThread::InitSocket(void) //每个线程里都定义一个定时器,每500ms执行发送查询命令
{
TimerX = new TTimer(NULL);
TimerX->Enabled = false;
TimerX->Interval = 500;
TimerX->OnTimer = TMySocketThread::OnTimerXProc;
}
void __fastcall TMySocketThread::OnTimerXProc(TObject* sender)
{
unsigned char SendBuff[2]= {AddrNum+0x80,0xff-AddrNum-0x80};
MyMainForm->TransmitData(SendBuff);
}
void __fastcall TMySocketThread::OnTimerYProc(TObject* sender)
{
MyMainForm->ReceiveData();
}
void __fastcall TMySocketThread::Execute(void)
{
TimerX->Enabled = true;
TimerY->Enabled = true;
}
软件已启动就执行Execute。但是却没有达到多线程的效果,还是轮询方式的效果。请大家帮忙看下错在哪里?又该如何实现?
...全文
126 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
原因是我的接收函数里调用了设备配套的一个库,库里有个接收岩石等待,等待设置的时间太长了,导致了此种现象,后来我把延时设置为0,效果就很好了。
  • 打赏
  • 举报
回复
在执行OnTimerXProc发送数据的时候,AddrNum的值是变化了的,而且是依次变化的。

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧