Добрый день, Знатоки!
Пишу на Borland C++ 6, Win XP.
Работаю с COM RS485 портом.
Код программы:
Com1Port=CreateFile("COM5",GENERIC_READ|GENERIC_WRITE,
                     0,// устройство связи должно быть открыто для монопольного доступа
                     NULL,// нет атрибутов защиты
                     OPEN_EXISTING, // cустройства связи должен использовать OPEN_EXISTING
                     0, // нет перекрытый с I/O
                     NULL); // для коммуникационных устройств параметр hTemplate должен быть NULL
 if(Com1Port==INVALID_HANDLE_VALUE)  ShowMessage("Порт COM5 занят ");
 
// Установвить размер буфера:
    SetupComm( Com1Port, 1024, 1024 );
// Очистить буфер
    PurgeComm( Com1Port, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR );
 // Задать установки таймаута
    ct.ReadIntervalTimeout=2;
    ct.ReadTotalTimeoutMultiplier=1;
    ct.ReadTotalTimeoutConstant=MAXDWORD;
    ct.WriteTotalTimeoutMultiplier=1;
    ct.WriteTotalTimeoutConstant=1000 ; //MAXDWORD;
    fSuccess =  SetCommTimeouts(Com1Port,&ct);   // timeout
    if (!fSuccess) ShowMessage ("( Error SetCommTimeouts)");
 // Получить текущую конфигурацию.
    fSuccess = GetCommState(Com1Port, &dcb);
  dcb.BaudRate = CBR_38400;      // устанавливаем скорость
  dcb.ByteSize  = 8;                     // размер данных xmit, и rcv
  dcb.Parity      = NOPARITY;         // нет бита четности
  dcb.StopBits = ONESTOPBIT;     // один стоп-бит
  dcb.EofChar  = '}';
    // setup hardware flow control
  dcb.fDtrControl = DTR_CONTROL_ENABLE;
  dcb.fRtsControl = RTS_CONTROL_ENABLE;
  dcb.fOutxDsrFlow = 0;
  dcb.fOutxCtsFlow = 0;
// Установить текущую конфигурацию.
  fSuccess=SetCommState( Com1Port, &dcb );
  if (!fSuccess)  ShowMessage ("(Set_CommState)");
// Послать запрос в файл
  fSuccess = WriteFile(Com1Port, Buffer, Size, &dw,NULL);
  if (!fSuccess)  ShowMessage (" Error WriteFile ");
  for (i=0; i<100; i++)          // ждем ответ
  {
  ClearCommError(Com1Port, & Errors, & Stat);
  if (Stat.cbInQue > 0 ) break;  // буфер порта
  Sleep(10);  // ждать
  }
  // гарантированно пришел ответ
  dw = 0;
  fSuccess=ReadFile(Com1Port, Buffer, 100 , &dw, NULL);
  if (dw > 0)
  после принятия данных из порта  в Buffer, уходим на обработку данных. И вроде все хорошо...
Каждые 5 секунд я запускаю таймер, который считывает данные из порта. Все работает.
Закрываю порт я по завершению работы программы по событию OnClose.
Но со мной в группе работает еще один парень, который тоже пишет программы для работы с этим же портом COM5.
 После того как отработает программа этого парня, "перестает" работать моя программа, а именно:
 ClearCommError(Com1Port, & Errors, & Stat);
  if (Stat.cbInQue > 0 ) break;  // буфер порта
Stat.cbInQue 
всегда равен нулю.
И помогает мне только  перезагрузка компа. Только после полной перезагрузки компа моя программа опять работает нормально.
Так вот вопрос: какую команду (или набор команд) мне нужно подать в порт, чтобы не перезагружать компьютер всякий раз, когда мне нужно поработать?