Loading

线程状态(转)

转自:http://www.cnblogs.com/Echang/archive/2008/07/15/1243232.html

先了解一下c# 所有运算符号的内容

表达式中的运算符按照称为运算符优先级的特定顺序计算。下表根据运算符执行的操作类型将它们划分到不同的类别中。类别按优先级顺序列出。

基本

x.y、f(x)、a[x]、x++、x--newtypeofcheckedunchecked

一元

+-!~++x--x、(T)x

算术 -- 乘法

*, /, %

算术 -- 加法

+, -

移位

<<, >>

关系和类型检测

<, >, <=, >=, is, as

相等

==, !=

逻辑(按优先级顺序)

&, ^, |

条件(按优先级顺序)

&&, ||, ?:

赋值

=, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

当表达式中出现两个具有相同优先级的运算符时,它们根据结合性进行计算。左结合运算符按从左到右的顺序计算。例如,x * y / z 计算为 (x * y) / z。右结合运算符按从右到左的顺序计算。赋值运算符和三元运算符 (?:) 是右结合运算符。其他所有二元运算符都是左结合运算符。然而,C# 标准没有指定何时执行表达式中的增量指令的“设置”部分。

线程状态

System.Threading.ThreadState枚举指定Thread的执行状态,此枚举有一个FlagsAttribute属性,允许其成员值按位组合。ThreadState定义的枚举常数如表19-3所示。

表19-3 ThreadState定义的枚举常数

成员名称

   

Aborted

线程处于Stopped状态中

AbortRequested

已对线程调用了Thread.Abort方法,但线程尚未收到试图终止它的挂起的System.Threading. ThreadAbortException

Background

线程正作为后台线程执行(相对于前台线程而言)。此状态可以通过设置Thread.IsBackground属性来控制

Running

线程已启动,它未被阻塞,并且没有挂起的ThreadAbortException

Stopped

线程已停止

StopRequested

正在请求线程停止。这仅用于内部

Suspended

线程已挂起

SuspendRequested

正在请求线程挂起

Unstarted

尚未对线程调用Thread.Start方法

WaitSleepJoin

由于调用WaitSleepJoin,线程已被阻止

Thread对象的ThreadState属性提供一个由ThreadState定义的位掩码,它指示线程的当前状态。一个线程至少总是处于ThreadState枚举中定义的一个可能状态,并且可以同时处于多个状态。

注意,只能在一些调试方案中使用线程状态,而不应该在代码中使用线程状态来同步线程活动。

在创建托管线程时,该线程处于Unstarted状 态。线程会保持Unstarted状态,直到被操作系统调度到已启动状态。调用Start方法使操作系统知道该线程可启动,但是它并不直接更改线程的状 态。一旦线程处于已启动的状态中,就可以执行许多操作来使线程更改状态。表19-4列出了使状态发生更改的操作,以及相应的新状态。

表19-4 使线程状态发生更改的操作及相应的新状态

   

ThreadState

在公共语言运行库中创建线程

Unstarted

线程调用Start

Unstarted

线程开始运行

Running

续表

   

ThreadState

线程调用Sleep

WaitSleepJoin

线程对其他对象调用Wait

WaitSleepJoin

线程对其他线程调用Join

WaitSleepJoin

另一个线程调用Interrupt

Running

另一个线程调用Suspend

SuspendRequested

线程响应Suspend请求

Suspended

另一个线程调用Resume

Running

另一个线程调用Abort

AbortRequested

线程响应Abort请求

Stopped

线程被终止

Stopped



判断线程状态需要根据状态进行逻辑运算 如
if (m_MailThread.ThreadState & (System.Threading.ThreadState.WaitSleepJoin | System.Threading.ThreadState.Background | System.Threading.ThreadState.Running)) == m_MailThread.ThreadState)
{
   //线程正在执行
}

与结果进行与运算 如果跟原先的结果没有变化的,则为判断条件成立
因为 1&1 =1; 结果是不变的才对.
posted @ 2008-08-02 17:19  today4king  阅读(4336)  评论(0编辑  收藏  举报