我遇到了这个功能:
DWORD WINAPI GetWindowThreadProcessId(
_In_ HWND hWnd,
_Out_opt_ LPDWORD lpdwProcessId
);
GetWindowThreadProcessId:
hWnd [in]
(处理窗口)
lpdwProcessId
[out,optional]
返回:DWORD
。
这是一个函数,它将窗口的句柄和指针作为输入。
返回时,*pointer
保存hWnd所属进程的PID。
返回值是hWnd所属线程的TID。
是什么让MS工程师选择将TID作为返回值返回,并将其作为PID的参数写入地址?为什么不相反呢?返回PID并写入TID?为什么不在指向包含struct {TID,PID}的结构的指针中返回?
是什么决定了这些选择?它背后有逻辑吗?
答案 0 :(得分:2)
Windows由线程拥有,线程由进程拥有。
如果您只想要线程ID,则不希望浪费任何时间获取进程ID。如果你想要进程ID,你将不得不首先获得线程ID。
这直接映射到GetWindowThreadProcessId API:
所以我希望这能解释为什么返回 TID并通过指针间接存储PID(而不是相反)。这也应该清楚为什么它不返回具有两个值的结构。
为什么没有两个单独的函数:GetWindowThreadID和GetThreadIDProcessID?如果您需要线程ID,则调用第一个,如果需要进程ID,则同时调用它们。我的猜测是GetWindowThreadProcessId可以比你必须做的更有效率地做第二步。