
在一个线程出现异常行为时,比如说CPU占用率过高,抛出异常等,你一定想知道这个线程是由哪个模块创建的。因此无论在哪个 *** 作系统上,获取线程名称是诊断线程相关问题的重要一步。 从线程ID获取线程名称通常的方法是,先获取该线程的入口地址
其实你问的应该是为什么直接写Thread。
先看下api上如此写:
currentThread
public static Thread currentThread()
返回对当前正在执行的线程对象的引用。
可见这时个静态方法,你这么理解更好点:你在哪个线程调用的我(currentThread),我就给你返回哪个线程。跟父子其实没有关系的,你在父中调用我,我就返回你说的父线程,你在子调用我就返回子线程,你在main主线程调用,我就返回主线程。也就是说你cpu正在运行哪个线程。如图:
您好,很高兴为您解答。
Map map=ThreadgetAllStackTraces();
Systemoutprintln(mapsize());
把这两句话放在需要的方法里里,运行就可以得到结果了。
下面这句话是java api的解释:
Thread类。
getAllStackTracespublic static Map<Thread,StackTraceElement[]> getAllStackTraces()返回所有活动线程的堆栈跟踪的一个映射。映射键是线程,而每个映射值都是一个 StackTraceElement 数组,该数组表示相应 Thread 的堆栈转储。返回的堆栈跟踪的格式都是针对 getStackTrace 方法指定的。
在调用该方法的同时,线程可能也在执行。每个线程的堆栈跟踪仅代表一个快照,并且每个堆栈跟踪都可以在不同时间获得。如果虚拟机没有线程的堆栈跟踪信息,则映射值中将返回一个零长度数组。
如果有安全管理器,则通过 RuntimePermission("getStackTrace") 权限和 RuntimePermission("modifyThreadGroup") 权限调用其 checkPermission 方法,查看是否可以获得所有线程的堆栈跟踪。
希望以上信息对你有帮助。
如果用多线程的话,相直接获取是没有办法的,因为这个程序是在另一个线程中执行的,当前线程会不等它执行完,就把后面的代码执行掉了
变通的方法,把这个方法执行的结果赋值给一个静态变量,然后读取这个静态变量的值~~~
如果有多个值,你可以把这些值放到一到静态的数组或是hashtable中~~~
其实你这个思路是错误的:
根据你的说明,你是想在每个页面都有去执行这个方法,而且还要获取结果。
1、这个线程和你的当前页面不在同一个线程,当前页面并不知道你这个ThreadTryRequest在别的线程中是什么样的状态,当前页面的代码也不会等你这个这个线程执行完就执行掉了,所以你不可能马上拿到这个线程的值的。
2、你这个应用,明显不该用异步的线程来执行,如果要用同步模式,我不知道你这个是为了什么目的把它放到线程中执行,因为你用同步模式,你想等这个线程的执行结果,等的时间和在页面顺序执行是一样的甚至更多~~~
你可以说一下你的目的是什么吗? 就你的描述来看,你根本没必要用线程。。。
从你的代码来看,你可能是想提高页面打开速度,把执行慢的代码放到线程中执行。。。 如果从这个思路来看是对的,不过光这样可不用,你还得用缓存,把执行结果放到缓存中再由线程或是线程池来维护。。。
总之,在一个页面中执行这么低效率的代码,整个解决方案就有问题。。。
===================================================================
public string ThreadTryRequest(string strUrl, string parm)
{
Thread thrOne = new Thread(thisThreadProc); //创建线程
ThreadParameter parameter = new ThreadParameter(); //实例化ThreadParameter对象,并赋值
parameterStrUrl = strUrlToString();
parameterparm = parmToString();
thrOneStart(parameter); //开启线程
return strState; //返回字符串
}
你想在这里就获取到值 那是获取不到的 return strState; 执行了
thisThreadProc(parameter) 还没执行完了,这个时候strState 还没被赋值,
所以我说你的思路是错误的
你想当时就知道一个线程的执行结果,除非你等~~~ 要不获取不到的~~~
c# ThreadPool 判断子线程全部执行完毕的四种方法 1、先来看看这个 多线程编程 多线程用于数据采集时,速度明显很快,下面是基本方法,把那个auto写成采集数据方法即可。 using System; using SystemCollectionsGeneric; using SystemText; u
delphi
function GetThreadsList(dwProcessId: DWORD; out hList: Tlist): Boolean;
type
PThreadsInfo = ^TThreadsInfo;
TThreadsInfo = record
dwThreadID : dword;
dwUsage : dword;
Priority : dword;
end;
var
hSnapShot: THandle;
ThreadsInfo : PThreadsInfo;
ThreadEntry32: TThreadEntry32;
begin
hList := TListCreate;
hListClear;
hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
ThreadEntry32dwSize := Sizeof(TThreadEntry32);
Result := Thread32First(hSnapShot, ThreadEntry32);
while Result do begin
if dwProcessId = ThreadEntry32th32OwnerProcessID then
try
New(ThreadsInfo);
with ThreadsInfo^, ThreadEntry32 do begin
dwThreadID := th32ThreadID;
dwUsage := cntUsage;
Priority := tpBasePri;
end;
hListAdd(ThreadsInfo);
finally
end;
Result := Thread32Next(hSnapShot, ThreadEntry32);
end;
end;
c++
void FillThreadList(CMyListCtrl &lstCtrl)
{
/if (m_dwProcessID <= 0)
{
return;
}/
//清空列表
lstCtrlDeleteAllItems();
//创建进程映像快照
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (hSnap == NULL)
{
AfxMessageBox("创建线程映像快照失败!");
return;
}
THREADENTRY32 th = {0};
thdwSize = sizeof(THREADENTRY32);
//检索系统中第一个进程快照信息
if (!Thread32First(hSnap, &th))
{
AfxMessageBox("查找进程线程失败!");
}
else
{
CString txtBasePri, txtThreadID, txtHThread, txtCntUsage;
do
{
if (thth32OwnerProcessID == m_dwProcessID)
{
txtThreadIDFormat("%d", thth32ThreadID);
txtBasePriFormat("%d", thtpBasePri);
txtCntUsageFormat("%d", thcntUsage);
txtHThreadFormat("%08X", thth32OwnerProcessID);
lstCtrlAddItem(txtThreadID, txtHThread, txtBasePri, txtCntUsage);
ZeroMemory(&th, 0);
thdwSize = sizeof(THREADENTRY32);
}
}
while (Thread32Next(hSnap, &th));//检索系统中的下一个进程快照信息
lstCtrlAutoSize();
txtBasePriFormat("ProcessThreadManager - [线程数:%d]", lstCtrlGetItemCount());
SetWindowText(txtBasePri);
}
CloseHandle(hSnap);
}
C# 改怎么写总该明白了吧,
获得线程ID 下步该干什么?
function OpenThread( dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwThreadId: DWORD): THandle; stdcall;
打开线程,获取句柄,或者直接暂停 启动
百度贴吧档次太低了 你想找答案换个地方吧。。。回答问题的人基本都是文不对题,人家问怎么获取程序中的线程,你管他那么多,管他干什么呢~
以上就是关于如何获取一个线程的所属模块全部的内容,包括:如何获取一个线程的所属模块、java中线程子类获取当前线程的引用时,线程子类调用Thread.currentThread()方法的疑问,谢谢大神。、怎样获取线程池中工作线程的数量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)