如何取得当前线程的句柄

如何取得当前线程的句柄,第1张

(以下都是windows下线程的相关函数)

得到当前线程句柄: GetCurrentThread(void)

得到当前线程ID: GetCurrentThreadId(void)

根据句柄得到线程ID: GetThreadId

根据窗口句柄得到此窗口所在线程的ID(同时得到进程的ID): GetWindowThreadProcessId

根据ID得到线程句柄: OpenThread(unsigned long)

挂起用SuspendThread

唤醒用ResumeThread

(强制)结束TerminateThread

cpuidle过高或过低回收到告警。工作中,机器cpuidle过高或过低,会收到告警。P2主机名:set-xr-xxxx监控项:all(#5)cpuidle1、使用top+大写P,查看cpu占用过高的进程这里往往就是后台java服务,要通过进程来排查具体的线程,这时有两种方法。top-H-p[pid],这时可以看到该进程下的所有线程,同样与大写P结合可以查看cpu占用过高的线程。

2、ps-mp[pid]-oTHREAD,tid,time,此时也可以看到该进程下的所有线程,其中m代表列出该进程下的所有线程,p代表列出线程占用cpu的时间,o代表格式化输出。通过以上两种方法可以获取到线程id,以下称为tid。

3、将tid转为16进制,可以使用以下命令printf"%xn"[tid],得到的16进制线程id,同样称为tid。

4、stack[pid]|greptid(16进制)-A60,从输出中排查公司相关的代码内容,找到问题代码的行数,进行排查,是fullgc导致的,可以进一步dumpjvm内存信息进行排查。

5、jmap-dump:format=b,file=dump-allhprof[pid]#dump全量内存数据,[pid]替换为上一步查找的进程id。

6、jmap-dump:live,format=b,file=dumphprof[pid]#再次dump存活对象内存数据,注意live参数会触发fullgc,本次dump一定要在上一步全量dump之后执行。

7、使用eclipse的工具mat打开,进行排查。

我现在有一个窗口的句柄(HWND),那如何获取该窗口的进程ID呢

需要什么函数,GetCurrentProcessId()是获取当前的进程ID,但是我想通过那个窗口的句柄获取那个窗口的进程,怎么弄

handle=getwindowthreadprocessid(hwnd)

就用GetWindowThreadProcessId,这个函数是获取指定窗口的线程ID和进程ID

C/C++ code

HWND hWnd; // 窗口的句柄DWORD dwPID;DWORD dwThreadID = ::GetWindowThreadProcessId(hWnd, &dwPID);

执行成功后,dwPID便是获取到的进程ID

线程创建

函数原型:intpthread_create(pthread_trestrict tidp,const pthread_attr_t restrict attr,void (start_rtn)(void),void restrict arg);

返回值:若是成功建立线程返回0,否则返回错误的编号。

形式参数:pthread_trestrict tidp要创建的线程的线程id指针;const pthread_attr_t restrict attr创建线程时的线程属性;void (start_rtn)(void)返回值是void类型的指针函数;void restrict arg start_rtn的形参。

线程挂起:该函数的作用使得当前线程挂起,等待另一个线程返回才继续执行。也就是说当程序运行到这个地方时,程序会先停止,然后等线程id为thread的这个线程返回,然后程序才会断续执行。

函数原型:intpthread_join(pthread_tthread, void value_ptr);

参数说明如下:thread等待退出线程的线程号;value_ptr退出线程的返回值。

返回值:若成功,则返回0;若失败,则返回错误号。

线程退出

函数原型:voidpthread_exit(void rval_ptr);

获取当前线程id

函数原型:pthread_tpthread_self(void);

互斥锁

创建pthread_mutex_init;销毁pthread_mutex_destroy;加锁pthread_mutex_lock;解锁pthread_mutex_unlock。

条件锁

创建pthread_cond_init;销毁pthread_cond_destroy;触发pthread_cond_signal;广播pthread_cond_broadcast;等待pthread_cond_wait。

线程是进程内部的一个执行单元,一个进程可以有多个线程,但是这些线程仅存在于该进程中,纯种是在它所属的进程地址空间里执行的,并在进程的地址空间对数据进行 *** 作。

输入下面的语句:

Requirements

Client

Requires Windows Vista

Server

Requires Windows Server 2008 or Windows Server 2003

Header

Declared in Winbaseh; include Windowsh

Library

Use Kernel32lib

DLL

Requires Kernel32dll

可以使用top命令查看一个进程的各个线程分别run在哪个processor上

在默认配置下不显示线程信息,需要进入Top后按shift+H,打开线程显示。

另外,如果没有P列,还需要按“f”,按“j”,添加,这一列显示的数字就是这个线程上次run的processor id。

如果同一个进程名字有多个出现,说明进程有多个线程,几个线程就是线程数量了。

THREADENTRY32

CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 进程ID)

Thread32First

Thread32Next

THREADENTRY32里面都没有这些信息,怎么能获取我想要的信息呢,

线程的ID,优先级,状态这些都搞定了,如何取得ETHREAD Ted 入口地址 及模块信息,就是XueTr中的查看进程线程信息窗口中显示的资料

以上就是关于如何取得当前线程的句柄全部的内容,包括:如何取得当前线程的句柄、cpuidle过高或过低、如何通过进程句柄得到进程id等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9532279.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存