#define NO_WIN32_LEAN_AND_MEAN
#include <tlhelp32h>
int GetProcessThreadList(DWORD th32ProcessID) //进程的ID
{
HANDLE hThreadSnap;
THREADENTRY32 th32;
hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, th32ProcessID);
if (hThreadSnap == INVALID_HANDLE_VALUE)
{
return 1;
}
th32dwSize = sizeof(THREADENTRY32);
if (!Thread32First(hThreadSnap, &th32))
{
CloseHandle(hThreadSnap);
return 1;
}
do
{
if (th32th32OwnerProcessID == th32ProcessID)
{
printf("ThreadID: %ld\n", th32th32ThreadID); //显示找到的线程的ID
}
}while(Thread32Next(hThreadSnap, &th32));
CloseHandle(hThreadSnap);
return 0;
}
用
pthread_getattr_np
(pthread_t
tid,
pthread_attr_t
attr);
即可。
具体你需要先了解一下pthread
相关接口。
比如,
#define
_GNU_SOURCE
/
See
feature_test_macros(7)
/
#include
<pthreadh>
int
main()
{
tid
=
pthread_create(xxxx,xxx);
pthread_getattr_np(tid,
&attr);
/
后面就可以用
pthread_attr_getstack
之类的接口从
attr
中获得这个线程的
stack
信息(比如地址,大小等)/
}
最近刚刚接触到RobotFramework,发现这个工具倒是可以满足我的要求,而且可以结合seleniumLibrary,用来做web的自动化测试相当不错。之前我也接触过selenium,不过感觉那个工具更贴近开发人员使用,有了robotFramework之后,感觉这个工具相当强大,而且是贴近测试人员的。之所以说强大,主要是这些测试脚本都可以用文本格式保存(如txt/html等)
==安装篇==
如果有想学的朋友可以自己下载以下文件安装(Google-code里可以找到大部分的安装文件):
这篇文章的内容比较旧了,最新的安装指南请查看 更新篇
python-271msi(首先要有python,请选择将Python加入Path)
wxPython28-win32-unicode-28110-py27exe(wxPython,必须要的)
robotframework-260win32exe(然后装robot的Framework)
robotframework-ride-0381win32exe(robotFramework的IDE,很不错)
robotframework-seleniumlibrary-28win32exe(seleniumLibrary)
安装成功后
执行[PythonDir]\Scripts\ridepy
看到界面就是安装成功了。
如果需要AutoIt支持就下载下面2个东东。
AutoItLibrary-11
pywin32-216win32-py27exe
==入门篇==
安装完成了,这个框架可以说是基于keyword的 *** 作,按F5可以看到所有加载的keyword。
首先新增一个project
然后新增suite
然后新增test case,接着在suite层级add library,把selenium library加进来,添加后按F5检验是否添加成功,如图
OK,继续在suite的setting里设置suite启动和结束的keyword,即Start Selenium Server和Stop Selenium Server,他会在运行时帮助我们自动启动seleniumserver。
接下来在test case里添加一个步骤,open browser(一般用selenium做web测试都要用这个方法来打开浏览器),添加后关键字变成蓝色表示找到关键字了,否则可能是拼写错误或者没有加载相应的library。红色表示有一个必选参数要给定输入值,具体参数可以看F5里的keyword说明。
输入参数,第二个参数默认是firefox,不过我没装,就用ie吧。
以上只是一个简单的例子,没有详细说明每个步骤的 *** 作,只是初步介绍。后续再详细介绍
THREADENTRY32
CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 进程ID)
Thread32First
Thread32Next
THREADENTRY32里面都没有这些信息,怎么能获取我想要的信息呢,
线程的ID,优先级,状态这些都搞定了,如何取得ETHREAD Ted 入口地址 及模块信息,就是XueTr中的查看进程线程信息窗口中显示的资料
VC
获取进程线程数
#include
void
EnumProcess(void)
{
HANDLE
hProcessSnap;
HANDLE
hProcess;
PROCESSENTRY32
pe32;
DWORD
dwPriorityClass;
hProcessSnap
=
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,
0);
if
(hProcessSnap
==
INVALID_HANDLE_VALUE)
{
return;
}
pe32dwSize
=
sizeof(PROCESSENTRY32);
if
(!Process32First(hProcessSnap,
&pe32))
{
CloseHandle(hProcessSnap);
return;
}
do
{
//printf("%s",
pe32szExeFile);
//完整文件名
//printf("%d",
(int)pe32cntThreads);//线程数
}while(Process32Next(hProcessSnap,
&pe32));
CloseHandle(hProcessSnap);
}
如果要获取进程句柄
HANDLE
hProcessHandle;
hProcessHandle
=
OpenProcess(0x1F0FFF,
true,
ProcessID);//ProcessID进程ID
这个在控制台,Win32
SDK
,MFC
都可以用的,只不过
SDK
,MFC
输出就
不用
printf
了,只要把获取的内容赋给变量就行了
以上就是关于如何分别列出指定进程的所有线程全部的内容,包括:如何分别列出指定进程的所有线程、linux应用中,在一个进程内如何获取本进程内其它线程的堆栈信息、、如何查看某进程下运行的线程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)