在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();
}
采纳吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)