获取进程/线程ID及常用函数

获取进程/线程ID

#ifdef WIN32
#include "windows.h"
#else
#include "unistd.h"
#endif
#include <thread>

std::thread m_thread = std::thread(&Logic::LogicThreadFunc);

#ifdef WIN32
	printf("pid is %d \n", GetCurrentProcessId());
	printf("tid is %d \n", GetCurrentThreadId());

#else
	printf("pid is %d \n", getpid());
	printf("tid is %d %d %d \n", gettid(), std::this_thread::get_id(), m_thread.get_id());
#endif

//C++标准库的获取方法:
#include <thread>
printf("main thread id = 0x%x\n", std::this_thread::get_id());

std::thread::id id = std::this_thread::get_id();
printf("threadid = 0x%x\n"), *(unsigned int*)&id);

linux线程优先级、设置线程名称:

std::thread m_thread = std::thread(&APPCameraAIS::CameraThread, this);
struct sched_param param;
int policy;

//设置线程优先级
param.sched_priority = 15;    //数字越大,优先级越高
pthread_setschedparam(m_thread.native_handle(), SCHED_RR, &param);

//获取线程优先级,当前线程句柄用:pthread_self()
int rc = pthread_getschedparam(m_thread.native_handle(), &policy, &param);
if (rc == 0)
{
    printf("APPCameraAIS get thread priority is %d\n", param.sched_priority);
}
else
{
    printf("APPCameraAIS get thread error.\n");
}

//设置线程名称
pthread_setname_np(m_thread.native_handle(), "Logic");
std::string name = "Logicccccccccccccc";
pthread_setname_np(pthread_self(), name.substr(0, 15).c_str());   //最大15个字符

#include <sys/prctl.h>
char szThreadName[20];
memset(szThreadName, 0, 20);
prctl(PR_GET_NAME, szThreadName);
prctl(PR_SET_NAME, "mainThread"); 

线程操作:

ExitThread(3);                                                              //正常结束一个线程函数
TerminateThread(handle);                                       //强制结束一个线程函数,不推荐使用的方式
GetExitCodeThread(handle,&dw);                          //获取线程结束的退出码

SuspendThread(handle);                                         //挂起\暂停\休眠一个线程
ResumeThread(handle);                                          //唤醒一个线程

GetThreadPriority(handle);                                       //获得线程的优先级
SetThreadPriority(handle);                                       //设置线程的优先级

ClosseHandle(handle);                                            //释放线程句柄  

//伪代码
hThread = ::CreateThread(NULL,0, ThreadProcIdle, NULL, CREATE_SUSPENDED, &dwThreadIdIdle);  
::SetThreadPriority(hThread,THREAD_PRIORITY_IDLE);  
::ResumeThread(hThread);  

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VC获得进程ID获得主线程ID获得窗口句柄获得主窗口获得进程名 1.窗口类名 窗口句柄 窗口标题 窗口句柄 HWND FindWindow( LPCTSTR lpClassName, //窗口类名 可用 VC或者VS自带的Spy++查看 LPCTSTR lpWindowName //窗口标题 ); 举例: 以 记事本为例, 记事本 窗口类名 为:NotePad, 窗口标题 视按具体情况而定,假设为"新建 文本文档.txt - 记事本" 窗口类名 窗口句柄 TCHAR lpClassName[]=TEXT("NotePad"); HWND hWnd=::FindWindow(lpClassName,NULL); if(hWnd && IsWindow(hWnd)) ::ShowWindow(hWnd,SW_HIDE); 窗口标题 窗口句柄 TCHAR lpWindowName[]=TEXT("新建 文本文档.txt - 记事本"); HWND hWnd=::FindWindow(NULL,lpWindowName); if(hWnd && IsWindow(hWnd)) ::ShowWindow(hWnd,SW_HIDE); 2.窗口句柄 进程ID 窗口句柄 主线程ID 要使用到的函数: DWORD GetWindowThreadProcessId( HWND hWnd, //目标窗口句柄 LPDWORD lpdwProcessId //返回目标窗口对应进程ID ); 例子: DWORD dwProcId=0;//存放返回的进程ID DWORD dwThreadId=0;//存放返回的主线程ID HWND hWnd=XXXX;//这里省略,可能用任务方式得到一个窗口的句柄.比如用1中的方法. dwThreadId=GetWindowThreadProcessId(hWnd,&dwProcId);//同时得到进程ID和主线程ID. 3.窗口HAND CWnd 用CWnd::FromHandle(HWND hWnd)函数.很多类都有这个函数. 4.进程进程ID (注:进程名,即在"任务管理器"中看到的名字) 用CCheckObject类(详细实现源文件); 例子: 以记事本为例,进程名为 NOTEPAD.EXE (不一定是大写哦,得到任务管理器是显示而定); CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); DWORD dwProcId=ch.GetProcessId(Name); 5. 进程名 主线程ID 例子: CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); DWORD dwThreadId=ch.GetThreadId(Name); 6. 进程名 主窗口句柄 CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); HWND hWnd=ch.GetTargetWindowHanle(Name); 7. 其它说明 从CCheckObject类和上面的源码中,不难写出从 进程ID线程ID 进程ID 主窗口句柄 主线程ID--->主窗口句柄 等等其它类似转换. 对于主窗口,特点如下: A. 不能用进程ID,要用线程ID,因为一个进程可能有多个线程,每个线程都可能会有主窗口. B. 主窗口不会有WS_CHILD属性 C. 主窗口没有父窗口 D. 主窗口一般都有子窗口(这个不是一定的,但是具有普遍性)
进程线程是操作系统中的重要概念,常用函数有: 1. fork(): 创建一个新的进程,该函数会复制当前进程的副本,包括代码、数据和打开的文件等。在父进程中,该函数返回新创建进程进程ID;在子进程中,该函数返回0。 2. exec(): 在当前进程中执行一个新的程序。该函数会将当前进程的代码和数据替换为新程序的代码和数据,并开始执行新程序。 3. wait(): 等待一个子进程结束,并获取其退出状态。该函数会暂停当前进程的执行,直到任意一个子进程结束。可以使用该函数来阻塞父进程,确保子进程的顺序执行。 4. exit(): 终止当前进程的执行,并返回一个退出状态。该函数会释放当前进程所占用的资源,并通知操作系统该进程已经结束。 5. pthread_create(): 创建一个新的线程。该函数会在当前进程中创建一个新线程,并指定线程执行的函数。 6. pthread_join(): 等待指定线程结束。该函数会暂停当前线程的执行,直到指定的线程结束。可以使用该函数来阻塞主线程,确保子线程的顺序执行。 7. pthread_exit(): 终止当前线程的执行。该函数会释放当前线程所占用的资源,并通知操作系统该线程已经结束。 这些是常见的进程线程函数,用于创建、管理和终止进程线程。具体的使用方法和参数可以参考相关的编程语言和操作系统文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值