在Windows系统中,可以使用Spy++等工具将进程pid转换为winid。首先,打开Spy++工具,找到菜单栏中的『进程』选项,点开后可以选择特定的进程id。选择对应的进程后,在Spy++工具的左侧会显示出该进程所对应的所有窗口信息,其中每个窗口都有一个唯一的winid。通过这种方式,可以将进程pid转换为winid,从而更方便地对进程窗口进行 *** 作和管理。需要注意的是,在进行这种 *** 作时要小心谨慎,避免误 *** 作导致系统的异常崩溃。
CreadThread,AfxBeginThread,_beginthread,_beginthreadex。
他们的区别在于使用的场景不同。
CreateThread是Windows的API函数(SDK函数的标准形式,直截了当的创建方式,任何场合都可以使用),提供 *** 作系统级别的创建线程的 *** 作,且仅限于工作者线程。不调用MFC和RTL的函数时,可以用CreateThread,其它情况不要轻易。在使用的过程中要考虑到进程的同步与互斥的关系(防止死锁)。线程函数定义为:DWORD
WINAPI
_yourThreadFun(LPVOID
pParameter)。但它没有考虑:
(1)C
Runtime中需要对多线程进行纪录和初始化,以保证C函数库工作正常(典型的例子是strtok函数)。
(2)MFC也需要知道新线程的创建,也需要做一些初始化工作(当然,如果没用MFC就没事了)。
AfxBeginThread:MFC中线程创建的MFC函数,首先创建了相应的CWinThread对象,然后调用CWinThread::CreateThread,
在CWinThread::CreateThread中,完成了对线程对象的初始化工作,然后,调用_beginthreadex(AfxBeginThread相比较更为安全)创建线程。它简化了 *** 作或让线程能够响应消息,即可用于界面线程,也可以用于工作者线程,但要注意不要在一个MFC程序中使用_beginthreadex()或CreateThread()。线程函数定义为:UINT
_yourThreadFun(LPVOID
pParam)
_beginthreadex:MS对C
Runtime库的扩展SDK函数,首先针对C
Runtime库做了一些初始化的工作,以保证C
Runtime库工作正常。然后,调用CreateThread真正创建线程。
仅使用Runtime
Library时,可以用_BegingThread。
小节:
实际上,这三个函数之间存在一定的调用关系,第一个纯粹一些,后两个完成自己相应的工作之后,调用前者实现线程的创建。其中CreateThread是由 *** 作系统提供的接口,而AfxBeginThread和_BeginThread则是编译器对它的封装。
用_beginthreadex()、_endthreadex函数应该是最佳选择,且都是C
Run-time
Library中的函数,函数的参数和数据类型都是C
Run-time
Library中的类型,这样在启动线程时就不需要进行Windows数据类型和C
Run-time
Library中的数据类型之间的转化,从而,减低了线程启动时的资源消耗和时间的消耗。但使用_beginthread,无法创建带有安全属性的新线程,无法创建暂停的线程,也无法获得
线程ID,_endthread的情况类似,它不带参数,这意味这线程的退出代码必须硬编码为0。
MFC也是C++类库(只不过是Microsoft的C++类库,不是标准的C++类库),在MFC中也封装了new和delete两中运算符,所以用到new和delete的地方不一定非要使用_beginthreadex()
函数,用其他两个函数都可以。
理解了这些,就知道什么时候该用什么函数创建线程了。
boost如何获取线程id? 已经创建了一个线程对象,为boost::thread pthread = new boost::thread(); 我想获取这个线程对象的id, 就像win32的函数GetCurrentThreadId返回值一样。 阅读文档发现pthread->get_id()能够返回一个boost::thread::i
线程是进程内部的一个执行单元,一个进程可以有多个线程,但是这些线程仅存在于该进程中,纯种是在它所属的进程地址空间里执行的,并在进程的地址空间对数据进行 *** 作。
输入下面的语句:
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
以上就是关于windows进程pid转winid全部的内容,包括:windows进程pid转winid、windows系统中创建线程常用哪几个函数,有什、boost怎么获取线程id等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)