//----------------------- Основной метод потока: ----------------------------
void __fastcall TSenThread::Execute()
{
while(!Terminated)
{
while(!Terminated && FStarted && SampleIndex < FData->RowCount)
{
try
{
int a = FData->Rows[SampleIndex]->Box + 1;
int p = FData->Rows[SampleIndex]->Pod + 1;
MainForm->WakePort->GetData(a, p, FBuffer);
}
catch(EInOutError &E)
{
for(int i = 0; i < SENCOUNT; i++)
FBuffer[i] = NOT_RESPOND;
}
FData->Lock();
try
{
for(int i = 0; i < SENCOUNT; i++)
FData->Rows[SampleIndex]->Data[i] = FBuffer[i];
}
__finally { FData->Unlock(); }
Synchronize(UpdateTable);
SampleIndex++;
Sleep(1);
}
if(FStarted && FNextSampleTime <= Now())
{
TDateTime NowTime = Now();
if(NowTime - FNextSampleTime < FPeriod)
FSampleTime = FNextSampleTime;
else FSampleTime = NowTime;
SampleIndex = 0;
FNextSampleTime = FSampleTime + FPeriod;
FData->Time = FSampleTime;
}
Sleep(1);
}
}