This isn't the same. When m_iScanTimeout was 0, we never return false.

But you have set 0 to mean the same as infinite. When the timeout is infinite !IsTimePast() always return true.