Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Чтение из COM-порта


Автор: Lexicss 17.10.2007, 12:26
Есть поток который работает с Com-портом(периодически пишет и читает), однако обнаружилась такая неприятная ситуация: На Win NT если хорошенько загрузить процессор, то вероятность на 80 %, что поток зависнет. Притом зависает он на GetOverlappedResult.  Почему такое может быть и с чем связано?

Вот фрагмент кода касающийся чтения из порта
Код

if (EvntMask and  EV_RXFLAG) <> 0
    then begin
      OLR[NRS].Offset:=0;
      OLR[NRS].OffsetHigh:=0;
      ResetEvent(OLR[NRS].hEvent);
      ReadFile(hCom[NRS], DirRecv, sizeof(Tdim512), CountByte, OLR[NRS]);
      GetOverlappedResult(hCom[NRS], OLR[NRS]^, NumOfBytes, True);
      if OLR[NRS]^.InternalHigh > 0
      then CountRead := OLR[NRS]^.InternalHigh - 1
      else CountRead := 0;
    end


Парадоксальность в том что на других системах(Win98, Win XP) всё нормально, даже при нагрузке процессора.  На Win NT тоже работает нормально, но только тогда когда процессор больше ничем не нагружен.

Автор: ivan219 17.10.2007, 15:51
Lexicss, может приоритер потоку дать побольше.

Автор: Lexicss 17.10.2007, 17:35
Цитата(ivan219 @ 17.10.2007,  15:51)
Lexicss, может приоритер потоку дать побольше.

Приоритет высокий  - THREAD_PRIORITY_HIGHEST

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)