Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GetLastInputInfo()提供适当的时间_C++_Mfc - Fatal编程技术网

C++ GetLastInputInfo()提供适当的时间

C++ GetLastInputInfo()提供适当的时间,c++,mfc,C++,Mfc,我已经在OnTimer()中编写了一段代码,每100ms调用一次,并给出应用程序空闲的时间。下面是代码 void MyAppView::OnTimer(UINT_PTR nIDEvent) { // TODO: Add your message handler code here and/or call default if(nIDEvent == 3) { // Get the last input event info. LASTINPUTINFO li; li.cb

我已经在OnTimer()中编写了一段代码,每100ms调用一次,并给出应用程序空闲的时间。下面是代码

void MyAppView::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent == 3)
{
    // Get the last input event info.
    LASTINPUTINFO li;
    li.cbSize = sizeof(LASTINPUTINFO);
    ::GetLastInputInfo(&li);
    // Calculate the time elapsed in seconds.
    DWORD te = ::GetTickCount();
    int elapsed = (te - li.dwTime) / 100;
    // Test against a preset timeout period in
    // seconds.
    if(5000 < elapsed)
    {
        // Call a function or set an application flag
        // that can be acted on outside this function.
        AfxMessageBox(_T("This session has timeout"));
    }
  }
}
void MyAppView::OnTimer(UINT\u PTR nIDEvent)
{
//TODO:在此处添加消息处理程序代码和/或调用默认值
如果(nIDEvent==3)
{
//获取最后的输入事件信息。
lastinputinfoli;
li.cbSize=sizeof(LASTINPUTINFO);
::GetLastInputInfo(&li);
//以秒为单位计算经过的时间。
DWORD te=::GetTickCount();
int经过=(te-li.dwTime)/100;
//根据中的预设超时时间进行测试
//秒。
如果(5000<经过)
{
//调用函数或设置应用程序标志
//可在此功能之外对其进行操作的。
AfxMessageBox(_T(“此会话已超时”);
}
}
}
我不知道这段代码出了什么问题,但每次我都得到了0。 请告诉我哪里出了问题。
提前谢谢。

我想您需要的是浮点计算,而不是整数

float elapsed = (te - li.dwTime) / 100.0;

你确定整个系统在500秒内没有收到任何输入吗?GetLastInputInfo是系统范围的!在调试器中单步执行此代码时,将生成输入,重置空闲计数器。尝试设置一个断点而不是断点。你的代码没有明显的错误。-1这不会改变任何事情。在不需要的地方,它会给你额外的精确度。OP想知道运行时间(以0.1s的间隔表示)是否大于500s。无论是在除法过程中截断,还是与偶数整数进行比较,都没有什么区别。我给出了一个可能的答案。您的建议暗示,在过去的0.1秒内有输入。OP有兴趣在500秒后暂停会话。他真的不在乎自己得到的是0、0.00001423876、142.4548765还是其他值。他不在乎分数。