如何判断thread处於忙碌状态

如何判断thread处於忙碌状态,第1张

在C#中如何判断线程当前所处的状态以及终止当前线程
在C#中,线程对象Thread使用ThreadState属性指示线程状态,它是带Flags特性的枚举类型对象。
ThreadState 为线程定义了一组所有可能的执行状态。一旦线程被创建,它就至少处于其中一个状态中,直到终止。在公共语言运行时中创建的线程最初处于Unstarted状态中,而进入运行时的外部线程则已经处于Running状态中。通过调用 Start可以将Unstarted线程转换为Running状态。并非所有的ThreadState值的组合都是有效的;例如,线程不能同时处于Aborted和Unstarted状态中。
因此判断线程当前的状态必须用bitmask按位运算来达到判断目的,不能直接使用相等来判断。

定义ThreadState如下:
1判断线程是否处于取消状态
A错误的判断
(MyThreadThreadState == ThreadStateAbortRequested)
B正确的判断
(MyThreadThreadState & ThreadStateAbortRequested) != 0

2判断线程是否处于运行状态
这个有一点特殊,因为ThreadStateRunning本身等于0,不能用&运算,所以判断可用以下方法:
(MyThreadThreadState == ThreadStateRunning)
终止当前线程:

ThreadCurrentThreadAbort()用于终止当前线程。
当然了,你需求中不但要终止当前线程,还要执行别的业务,d出form。那么就需要一个新的委托,在线程过程中调用这个委托来终止现成,从而达到在终止线程后执行其他业务。
大概代码,我就写个大概的:
public delegate void StopThreadDelegate(Thread t);
static void StopThread(Thread t)
{
//关闭线程
tAbort();
//启动新窗体
}
public static void Main()
{
new Thread(delegate(object data)
{
//这里是你的执行逻辑
//当要执行退出线程时
dynamic d = data;
//var d = (StopThreadDelegate)data; //非40
d(ThreadCurrentThread);
})Start(new StopThreadDelegate(StopThread));
}

添加对WM_CLOSE消息的处理代码就可以知道程序什么时候要关闭了。
文件的时候系统不直接把内容写到文件中的而是放在系统缓冲区中。系统会在你关闭文件的时候再把缓冲区中的内容写到文件中,你也可以手动把缓冲区中的内容“更新”到文件中
可以使用以下函数
c函数 fflush()
c++SDK函数FlushFileBuffers()
C++ CFile类成员函数使用方法
CFile file(_T("testtxt"),CFile::modeReadWrite); //以读写方式打开文件
fileWrite(); //写文件
fileFlush(); //把缓冲内容写到文件中
fileClose() //关闭文件

根据对象名"thread"就可以处理,不需要用"pdate"来判断
对于线程对象thread,判断是否存在用:
bool b=threadIsAlive; 返回true就是存在否则不存在
结束这个线程:
if (threadIsAlive){
threadAbort();
}
采纳吧。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10331484.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存