多线程定时发送数据
我要定时查询连接设备的当前状态,每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。但是却没有达到多线程的效果,还是轮询方式的效果。请大家帮忙看下错在哪里?又该如何实现?