delphi里怎么没有GetThreadId

talip1106 2017-01-04 01:41:41
我在翻译一个c++编写的代码到delphi。发现有个API函数名叫 GetThreadId。
网上搜索了各种资料,只找到这是一个API函数,根据线程句柄获得线程id。但是到delphi里面,提示说找不到这个函数的定义。
很郁闷,谁遇到过这样的问题啊。。。大家帮帮忙,在线等啊。。。
c++ func
static void close_callback_thread(HANDLE thread)
{
if(thread == NULL)
return;
if(msgqueue_ready_evt) {
/* if quit before the thread ready */
WaitForSingleObject(msgqueue_ready_evt, INFINITE);
CloseHandle(msgqueue_ready_evt);
msgqueue_ready_evt = NULL;

PostThreadMessage(GetThreadId(thread), WM_QUIT, 0, 0);
WaitForSingleObject(thread, INFINITE);
CloseHandle(thread);
}
}
...全文
400 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
talip1106 2017-02-01
  • 打赏
  • 举报
回复
搞定,要自己手动引入kernel32.dll.....
看那山瞧那水 2017-01-05
  • 打赏
  • 举报
回复
TThread有个ThreadID的属性
  • 打赏
  • 举报
回复
uses WinApi.Windows;
不得闲 2017-01-04
  • 打赏
  • 举报
回复
Delphi的API申明并不是完全的MSDN,GetThreadID这个函数在Win2003Server之后才有吧,具体看MSDN, https://msdn.microsoft.com/en-us/library/windows/desktop/ms683233(v=vs.85).aspx 这里有完整说明,普通版至少需要Vista,服务器版需要2003Server之后,在Kernel32.dll中 所以,如果你要用,完全可以自己手工声明一下就是 function GetThreadId(threadHandle: THandle): DWORD;stdcall;external 'Kernel32.dll'; 然后调用就是了 为了保险起见,应该这样

var
  GetThreadId: function(threadHandle: THandle): DWORD;stdcall;

GetThreadId := GetProcAddress(GetModuleHandle('Kernel32.dll'),'GetThreadId');
  if Assigned(GetThreadId) then
    Tag := GetThreadId(GetCurrentThread);

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧