There is also GetFrameTimeMilliseconds()
GetFrameTimeMilliseconds() gives a timestamp in milliseconds, where the frame your Lua code currently runs for, started to render. It keeps the value until all Lua is done. While GetGameTimeMilliseconds() is continous even within the frame.
=> GetGameTimeMilliseconds()>=GetFrameTimeMilliseconds().
If you need time quantized to the frame use GetFrameTimeMilliseconds().
Even if GetGameTimeMilliseconds()-GetFrameTimeMilliseconds() >= 2000, the user has not seen it, because the screen has freezed.