Есть поток который работает с 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 тоже работает нормально, но только тогда когда процессор больше ничем не нагружен. |