您的位置:程序门 -> .net技术 -> c#



.net 中线程 id 究竟怎么回事?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


.net 中线程 id 究竟怎么回事?[已结贴,结贴人:ahbian]
发表于:2007-08-19 00:48:28 楼主

console.writeline(appdomain.getcurrentthreadid()   +   "   :   "   +   system.threading.thread.currentthread.managedthreadid);

前者是以前通用的方法,但   2.0   中已为   obsolete,但仍旧可以工作,而且获取的值是正确的。

后者是   2.0   中新增的方法,用以替代前者的,据说值更稳定。可实际上其值无法用在   win32   调用中。所以我怀疑它返回的值是否正确?

请大侠指点一二。
发表于:2007-08-19 00:55:051楼 得分:0
一个是线程id
一个是托管线程id
发表于:2007-08-19 00:57:092楼 得分:0
要是这样,编译器也不应该发出任何警告啊?两者用处不同,如何替代,如何过时了?
发表于:2007-08-19 00:59:193楼 得分:0
真tnnd让人一头雾水。期待完美解释啊。
搜索了网络也没找到我期待的答案。
发表于:2007-08-19 01:00:354楼 得分:0
注意:此属性在   .net   framework   2.0   版中是新增的。  

获取当前托管线程的唯一标识符。  

命名空间:system.threading
程序集:mscorlib(在   mscorlib.dll   中)

语法
visual   basic(声明)  
public   readonly   property   managedthreadid   as   integer
 
visual   basic(用法)  
dim   instance   as   thread
dim   value   as   integer

value   =   instance.managedthreadid

 
c#  
public   int   managedthreadid   {   get;   }
 
c++  
public:
property   int   managedthreadid   {
int   get   ();
}
 
j#  
/**   @property   */
public   int   get_managedthreadid   ()

 
jscript  
public   function   get   managedthreadid   ()   :   int

 


属性值
一个整数,表示此托管线程的唯一标识符。  
备注
managedthreadid   属性的值不会随时间而变化,即使承载公共语言运行库的非托管代码将线程实现为纤程。
------------------
注意这里...
如果真的是 "纤程 "的话.
估计就没啥用了吧.

注,以上内容纯属推测.
发表于:2007-08-19 01:04:045楼 得分:0
getcurrentthreadid是系统在程序运行时的线程id

而managedthreadid   这个线程id是给system.threading.thread这个对象使用的。

换句话说就是.net把真正的线程id给封装起来了,然后把控制权交给system.threading.thread类。
发表于:2007-08-19 01:09:476楼 得分:20
至于为什么要使getcurrentthreadid过时,原因很简单,因为appdomain是直接对系统打交道,而不是对.net平台。所以可以认为是net1.1的一种过渡。

发表于:2007-08-19 02:11:407楼 得分:0
有点牵强了。
与   win32   p/invoke   打交道时,有时线程   id   是很重要的,不可或缺的。
难道以后只能用   win32   api   中的   getcurrentthreadid   了?就算这样,win32   api   中的   getcurrentthreadid   就一定安全吗?
既然   managedthreadid   不能表示实际的   win32   线程   id,那么有什么其他获取安全的   win32   线程   id   的方法呢?
发表于:2007-08-19 05:08:008楼 得分:0
managementid   is   managed   by   clr.   it   has   nothing   to   do   with   the   underlying   native   threadid
发表于:2007-08-19 11:31:359楼 得分:0
lz首先要明白,.net的宗旨是把所有程序运行在.net平台上,而与系统无关。

所以.net程序没必要得到用于win32程序的线程id,就算得到了也没什么价值。除非你写个.net的模块让传统的win32程序来调用得到线程id,然后再用win32的方法去控制线程。。。

估计没人会这样设计软件。

.net是跨平台的,所以以后直接对系统的操作会越来越少,对系统的操作必定要通过.net平台。
发表于:2007-08-19 12:35:2810楼 得分:0
该回复于2007-12-21 19:52:59被管理员或版主删除


快速检索

最新资讯
热门点击