gpt4 book ai didi

c++ - 为什么在调用 GetThreadTimes 时出现错误 "The handle is invalid"?

转载 作者:可可西里 更新时间:2023-11-01 11:55:07 27 4
gpt4 key购买 nike

我需要获取工作线程的 CPU 时间。看来我必须使用 GetThreadTimes这样做,因为我的目标是 Windows XP 和更新版本。根据文档,Windows XP 不支持 QueryThreadCycleTime .

这是我写的测试程序的主要部分:

#include <windows.h>

UINT TestFunction(LPVOID pParam)
{
TRACE("Thread Started!\n");
Sleep(10000);
TRACE("Thread about to terminate!\n");
return 0;
}

...

CWinThread* thread = AfxBeginThread(TestFunction, NULL);

Sleep(500);

LPFILETIME creationTime = NULL;
LPFILETIME exitTime = NULL;
LPFILETIME kernelTime = NULL;
LPFILETIME userTime = NULL;

int result = GetThreadTimes(thread, creationTime, exitTime, kernelTime, userTime);

TRACE("Result: %d\n", result);

if(result != 0)
{
TRACE("Got result!\n");
}
else
{
//ref: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680582(v=vs.85).aspx
LPVOID lpMsgBuf;
DWORD dw = GetLastError();

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL
);

TRACE("Timing query failed with error %d: %s", dw, lpMsgBuf);

LocalFree(lpMsgBuf);

...

我得到以下调试输出:

Thread Started!
Result: 0
Timing query failed with error 6: The handle is invalid.

这是为什么?我们知道线程正在运行是因为“Thread Started!”跟踪消息。我试过调整 sleep 时间,直到线程终止。我仍然收到无效句柄错误。

测试程序是用 Visual C++ 6 构建的 MFC 应用程序。

最佳答案

您的线程 是一个CWinThread *。您传递给 GetThreadTimes 的参数应该是一个 HANDLE

CWinThread 有一个转换运算符来获取线程的操作系统句柄,因此您应该能够使用:GetThreadTimes(*thread, ...)

但是还有一个问题:你真的需要改变这些:

LPFILETIME creationTime = NULL;
LPFILETIME exitTime = NULL;
LPFILETIME kernelTime = NULL;
LPFILETIME userTime = NULL;

像这样:

FILETIME creationTime;
FILETIME exitTime;
FILETIME kernelTime;
FILETIME userTime;

然后,当您调用该函数时,您会传递每个函数的地址,因此您的调用如下所示:

GetThreadTimes(*thread, &creationTime, &exitTime, &kernelTime, &userTime);

关于c++ - 为什么在调用 GetThreadTimes 时出现错误 "The handle is invalid"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19327432/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com