我需要手动设置线程的优先级,并使用GetProcessIdOfThread
执行此操作。不幸的是,第三方库要求我将代码构建为Use MFC in a Shared DLL
,以便我可以使用afx.h
来获取某些dll技巧。
如何在没有GetProcessIdOfThread
的情况下使用windows.h
等功能?
我试图包含WinBase.h
,但这会引发很多废话,编译错误。
答案 0 :(得分:4)
如果您的下游链接器设置正确,您只需将函数声明添加到您选择的项目头文件中。
以下是WinBase.h
中的原始声明:
WINBASEAPI DWORD WINAPI GetProcessIdOfThread(HANDLE Thread);
如果您不包含Windows.h
,那么您将不会拥有该特定声明所需的大多数已使用的预处理器宏/定义。如果您要链接到CRT的静态库版本,则这是等效的定义:
unsigned long __stdcall GetProcessIdOfThread(void *Thread);
如果您要链接CRT的DLL版本,则需要在声明前添加__declspec(dllimport)
:
__declspec(dllimport) unsigned long __stdcall GetProcessIdOfThread(void *Thread);
答案 1 :(得分:4)
我会将一个包装函数放在一个单独的.c(pp)文件中来解决这个问题:
#include <windows.h>
DWORD GetPidFromThread(HANDLE thread)
{
return GetProcessIdOfThread(thread);
}
您可能仍需要将DWORD
和HANDLE
替换为您可以在其他文件中使用的某些类型[并使用GetPidFromThread
的原型生成头文件,但至少你可以合理安全地隔离这些位。