看函数原型:
DWORD WINAPI SuspendThread(_In_ HANDLE hThread
);
需要传人线程句柄。这个句柄可以用 OpenThread 来打开指定 ID 的线程来得到,即结构体中的th32ThreadID。
ios有三种主要方法:1、NSThread。2、NSOperation。3、GCD。
1、 NSThread:
调用方法如下:如果需要函数参数的话,可以通过Object传递。
11:[NSThread detachNewThreadSelector:@selector(threadInMainMethod:) toTarget:self withObject:nil];
12:NSThread myThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadInMainMethod:) object:nil];
[myThread start];
13: [obj performSelectorInBackground:@selector(threadMe) withObject:nil];
2、 NSOperation:
NSOperation也是多线程的一种,NSOpertaion有2种形式
(1) 并发执行
并发执行你需要重载如下4个方法
//执行任务主函数,线程运行的入口函数
- (void)start
//是否允许并发,返回YES,允许并发,返回NO不允许。默认返回NO
-(BOOL)isConcurrent
- (BOOL)isExecuting
//是否已经完成,这个必须要重载,不然放在放在NSOperationQueue里的NSOpertaion不能正常释放。
- (BOOL)isFinished
比如TestNSOperation:NSOperaion 重载上述的4个方法,
声明一个NSOperationQueue, NSOperationQueue queue = [[[NSOperationQueue alloc ] init] autorelease];
[queue addOperation:testNSoperation];
它会自动调用TestNSOperation里的 start函数,如果需要多个NSOperation,你需要设置queue的一些属性,如果多个NSOperation之间有依赖关系,也可以设置,具体可以参考API 文档。
(2)非并发执行
-(void)main
只需要重载这个main方法就可以了。
3、 GCD
GCD很强大,我的使用经验很少。但是scorpiozj 总结的比较全面
。。一个进程下面可以有多个线程,你怎么能“这个PID的值的线程ID”?
你最多只能做到枚举这个进程下面的所有线程,然后你自己查找合适的线程。
要枚举进程中的所有线程,要先用
CreateToolHelp32Snapshot
创建一个快照,然后用
Thread32First
和
Thread32Next
一项一项遍历。
线程入口地址,参加文章
>
#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;
}
以上就是关于c++遍历当前进程的所有线程全部的内容,包括:c++遍历当前进程的所有线程、ios 怎么获取当前的线程数目、VB 如何获取指定pid的线程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)