Цитата(Aleks17 @ May 4 2006, 16:24)

Я правда в Билдере нифига не понимаю - на Visual C++ пишу, но думаю принципы те же:
Вариант 1) Многопоточное приложение.
Вариант 2) Открываешь порт для асинхронных операций (FILE_FLAG_OVERLAPPED по-моему)
и организуешь процедуру таймера, внутри которой (а не в процедуре) проверяешь на получение данных.
вот посмотрите
Код
MComPort.Write(&lpBuf,1); // отправили байт в устройство
Timer1->Enabled=true; //включили таймер
memset(&MComPort.Overlap,0,sizeof(MComPort.Overlap)); //это для overlap
MComPort.Overlap.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL); //MComPort.Overlap - сама структура оверлап
MComPort.Read(SystemAnswer,1); //читаем байт в переменную SystemAnswer
//обработчик события таймера
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(WaitForSingleObject(MComPort.Overlap.hEvent,10000)==WAIT_OBJECT_0)
{
GetOverlappedResult(MComPort.handle,&MComPort.Overlap,&byte_counter,FALSE);
}
else {
Application->MessageBoxA("Нет отзыва о выполнении движения","Внимание",MB_OK);
}
}
мне кажется, что я сделал что-то не так...