win32 C++项目中的输入超时
Timing out input in win32 C++ Project
我正在尝试找出在按键之间经过太多时间时使输入超时的最佳方法。我是否应该创建一个每次调用更新时按增量递增的 cheatTime 浮点数?很晚了,我累了,脑子炸了。任何帮助将不胜感激。 m_pDI
是一个 DirectInput 包装器对象。在该类中,我有一个ClearInput()
函数,它将清除其缓冲区内的任何输入。
if( m_pDI->KeyDown( DIK_TAB ) && m_pDI->KeyDown( DIK_1 ) )
{
if( m_pDI->KeyDown( DIK_H ) )
{
m_bGameCheats[ 0 ] = true;
if( !m_pXA->SFXIsSoundPlaying( m_nCheatSoundID ) )
m_pXA->SFXPlaySound( m_nCheatSoundID, false );
}
else if( m_pDI->KeyDown( DIK_C ) )
{
m_bGameCheats[ 1 ] = true;
if( !m_pXA->SFXIsSoundPlaying( m_nCheatSoundID ) )
m_pXA->SFXPlaySound( m_nCheatSoundID, false );
}
else if( m_pDI->KeyDown( DIK_S ) )
{
m_bGameCheats[ 2 ] = true;
if( !m_pXA->SFXIsSoundPlaying( m_nCheatSoundID ) )
m_pXA->SFXPlaySound( m_nCheatSoundID, false );
}
}
请告诉我我是否答对了问题。两种情况:
1:你只想在按下 A 后按下 B 时做某事,除非 2 之间经过的时间太长。
在这种情况下,存储按下 A 的时间。按下 B 时,请检查上次按下 A 的时间。
2:如果在按下 A 后按下 B 时,您要做一件事,如果在按下 A 后未按下 B,则要做另一件事。
由于您只知道在按下 A 后等待超时后未按下 B,因此您需要在按下 A 后立即启动超时,并在再次按下 A 时重新启动它。实现可能是基于事件的,如果您有一个基于时间帧的运行循环,则基于周期性 theck,或者如果应用程序/线程没有做太多事情,则基于繁忙的轮询循环。
轮询如下所示:
void AIsPressed()
{
mLastTimeAWasPressed = clock();
}
bool HasTooMuchTimePassedSinceAWasPressed()
{
return (clock() - mLastTimeAWasPressed) > (mTimeout * CLOCKS_PER_SEC)
}
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 检查输入是否不是整数或数字
- 正在尝试了解输入验证循环
- 读取文件并输入到矢量中
- C++如何通过用户输入删除列表元素
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 用户定义函数中的指针和输入
- 如何在Qt 4.8中阻止/忽略/丢弃早于特定超时的用户输入事件
- 设置输入(CIN)的超时
- 输入C 中的超时
- win32 C++项目中的输入超时
- Win32 - 从标准输入读取超时
- 选择线程:超时和用户输入