make setTimeout more accurate