暂停的时候我该如何去停止线程,点击start的时候如何继续刚才暂停的任务?
停止的时候又该如何去停止线程的工作,以及按了start的时候如何开始?
11 个解决方案
#2
去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
#3
顺便借这个帖子请教下版主,如果我的线程中的处理不是随时可以暂停的,比如其中有连续几个与下位机的通讯操作,不能执行了2个操作,线程暂停下来。这样的情况如何处理?
我现在的线程是定义在一个类中的,我目前是另外在类里面定义了一个状态变量,再定义了一个暂停函数,在外部代码调用这个类的暂停函数时,则改变类里面的那个状态变量为暂停,而我上面说的连续几个操作之间是检查这个状态变量的,只有在都执行完成后,才检查这个状态变量,然后再暂停。
不知道还有没有更好的方法来处理这样的情况。如果我上面说的不详细,还请指出。
#4
提供另外一种思路供参考。
不暂停或者回复线程,线程一直在运行,在线程中使用线程安全的变量作为开关。满足某种条件时,进行相关处理,不满足让线程sleep即可。在程序退出时再退出线程。
不暂停或者回复线程,线程一直在运行,在线程中使用线程安全的变量作为开关。满足某种条件时,进行相关处理,不满足让线程sleep即可。在程序退出时再退出线程。
#5
线程开始:
thread.Start();
线程挂起
thread.Suspend();
线程继续
thread.Resume();
线程终止
thread.Abort();
thread.Start();
线程挂起
thread.Suspend();
线程继续
thread.Resume();
线程终止
thread.Abort();
#6
我线程运行的时候有相应的进度条来显示进度如何,用的是progress.performstep的方法,但是感觉比自己预计的快,这个怎么修改呢?谢谢!
#7
如果休眠的话,那怎么知道要休眠多久呢?
#8
我的线程所做的工作是向设备发送命令,然后有一个进度条来显示目前的进度,一共向设备发送4次命令,一次放松完成之后要停下来一段时间,然后再发送另一条命令,进度条的显示包括发送命令的以及等待的时间,我发觉在autoresetevent.waitone时候,我等待的时间过去了之后,这里会继续再执行一条才会停止,这是为什么?
for(int i = 0;i<commlist.count;i++)
{
autoEvent.waitone();
timeRun();//这里是执行进度条的那个
String[] commstr = commlist[i] as string[];
runcommand(commstr,i);//这里是发送命令的方法
thread.sleep(time * 1000);//这里是上一个发送完后需要等待一段时间
}
我发觉我在把timer停止了之后,这一段会执行一遍才停下来,这个是为什么?
另执进度条的那个地方我也用了个timer。
#9
可能是惯性吧 说实话这个问题我也不知道什么原因 因为当时对我程序没多大妨碍 所以就没深研究了~~~~
#10
去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
我的线程所做的工作是向设备发送命令,然后有一个进度条来显示目前的进度,一共向设备发送4次命令,一次放松完成之后要停下来一段时间,然后再发送另一条命令,进度条的显示包括发送命令的以及等待的时间,我发觉在autoresetevent.waitone时候,我等待的时间过去了之后,这里会继续再执行一条才会停止,这是为什么?
for(int i = 0;i<commlist.count;i++)
{
autoEvent.waitone();
timeRun();//这里是执行进度条的那个
String[] commstr = commlist[i] as string[];
runcommand(commstr,i);//这里是发送命令的方法
thread.sleep(time * 1000);//这里是上一个发送完后需要等待一段时间
}
我发觉我在把timer停止了之后,这一段会执行一遍才停下来,这个是为什么?
另执进度条的那个地方我也用了个timer。
可能是惯性吧 说实话这个问题我也不知道什么原因 因为当时对我程序没多大妨碍 所以就没深研究了~~~~
o(︶︿︶)o 唉,我后来改用了thread.suspend和thread.resume了
#11
去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
我的线程所做的工作是向设备发送命令,然后有一个进度条来显示目前的进度,一共向设备发送4次命令,一次放松完成之后要停下来一段时间,然后再发送另一条命令,进度条的显示包括发送命令的以及等待的时间,我发觉在autoresetevent.waitone时候,我等待的时间过去了之后,这里会继续再执行一条才会停止,这是为什么?
for(int i = 0;i<commlist.count;i++)
{
autoEvent.waitone();
timeRun();//这里是执行进度条的那个
String[] commstr = commlist[i] as string[];
runcommand(commstr,i);//这里是发送命令的方法
thread.sleep(time * 1000);//这里是上一个发送完后需要等待一段时间
}
我发觉我在把timer停止了之后,这一段会执行一遍才停下来,这个是为什么?
另执进度条的那个地方我也用了个timer。
可能是惯性吧 说实话这个问题我也不知道什么原因 因为当时对我程序没多大妨碍 所以就没深研究了~~~~
o(︶︿︶)o 唉,我后来改用了thread.suspend和thread.resume了
只要能实现想要的功能用什么方法无所谓
#1
#2
去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
#3
参考 http://www.360doc.com/content/11/0217/11/3705007_93741317.shtml
顺便借这个帖子请教下版主,如果我的线程中的处理不是随时可以暂停的,比如其中有连续几个与下位机的通讯操作,不能执行了2个操作,线程暂停下来。这样的情况如何处理?
我现在的线程是定义在一个类中的,我目前是另外在类里面定义了一个状态变量,再定义了一个暂停函数,在外部代码调用这个类的暂停函数时,则改变类里面的那个状态变量为暂停,而我上面说的连续几个操作之间是检查这个状态变量的,只有在都执行完成后,才检查这个状态变量,然后再暂停。
不知道还有没有更好的方法来处理这样的情况。如果我上面说的不详细,还请指出。
#4
提供另外一种思路供参考。
不暂停或者回复线程,线程一直在运行,在线程中使用线程安全的变量作为开关。满足某种条件时,进行相关处理,不满足让线程sleep即可。在程序退出时再退出线程。
不暂停或者回复线程,线程一直在运行,在线程中使用线程安全的变量作为开关。满足某种条件时,进行相关处理,不满足让线程sleep即可。在程序退出时再退出线程。
#5
线程开始:
thread.Start();
线程挂起
thread.Suspend();
线程继续
thread.Resume();
线程终止
thread.Abort();
thread.Start();
线程挂起
thread.Suspend();
线程继续
thread.Resume();
线程终止
thread.Abort();
#6
去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
我线程运行的时候有相应的进度条来显示进度如何,用的是progress.performstep的方法,但是感觉比自己预计的快,这个怎么修改呢?谢谢!
#7
提供另外一种思路供参考。
不暂停或者回复线程,线程一直在运行,在线程中使用线程安全的变量作为开关。满足某种条件时,进行相关处理,不满足让线程sleep即可。在程序退出时再退出线程。
如果休眠的话,那怎么知道要休眠多久呢?
#8
去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
我的线程所做的工作是向设备发送命令,然后有一个进度条来显示目前的进度,一共向设备发送4次命令,一次放松完成之后要停下来一段时间,然后再发送另一条命令,进度条的显示包括发送命令的以及等待的时间,我发觉在autoresetevent.waitone时候,我等待的时间过去了之后,这里会继续再执行一条才会停止,这是为什么?
for(int i = 0;i<commlist.count;i++)
{
autoEvent.waitone();
timeRun();//这里是执行进度条的那个
String[] commstr = commlist[i] as string[];
runcommand(commstr,i);//这里是发送命令的方法
thread.sleep(time * 1000);//这里是上一个发送完后需要等待一段时间
}
我发觉我在把timer停止了之后,这一段会执行一遍才停下来,这个是为什么?
另执进度条的那个地方我也用了个timer。
#9
去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
我的线程所做的工作是向设备发送命令,然后有一个进度条来显示目前的进度,一共向设备发送4次命令,一次放松完成之后要停下来一段时间,然后再发送另一条命令,进度条的显示包括发送命令的以及等待的时间,我发觉在autoresetevent.waitone时候,我等待的时间过去了之后,这里会继续再执行一条才会停止,这是为什么?
for(int i = 0;i<commlist.count;i++)
{
autoEvent.waitone();
timeRun();//这里是执行进度条的那个
String[] commstr = commlist[i] as string[];
runcommand(commstr,i);//这里是发送命令的方法
thread.sleep(time * 1000);//这里是上一个发送完后需要等待一段时间
}
我发觉我在把timer停止了之后,这一段会执行一遍才停下来,这个是为什么?
另执进度条的那个地方我也用了个timer。
可能是惯性吧 说实话这个问题我也不知道什么原因 因为当时对我程序没多大妨碍 所以就没深研究了~~~~
#10
去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
我的线程所做的工作是向设备发送命令,然后有一个进度条来显示目前的进度,一共向设备发送4次命令,一次放松完成之后要停下来一段时间,然后再发送另一条命令,进度条的显示包括发送命令的以及等待的时间,我发觉在autoresetevent.waitone时候,我等待的时间过去了之后,这里会继续再执行一条才会停止,这是为什么?
for(int i = 0;i<commlist.count;i++)
{
autoEvent.waitone();
timeRun();//这里是执行进度条的那个
String[] commstr = commlist[i] as string[];
runcommand(commstr,i);//这里是发送命令的方法
thread.sleep(time * 1000);//这里是上一个发送完后需要等待一段时间
}
我发觉我在把timer停止了之后,这一段会执行一遍才停下来,这个是为什么?
另执进度条的那个地方我也用了个timer。
可能是惯性吧 说实话这个问题我也不知道什么原因 因为当时对我程序没多大妨碍 所以就没深研究了~~~~
o(︶︿︶)o 唉,我后来改用了thread.suspend和thread.resume了
#11
去我博客看下 我那里有个线程暂停、开始的方法(有短时间我也用用到了,然后百科总结的写了个方法) 看不懂的话 私信过来你QQ 我给你个winform的例子
我的线程所做的工作是向设备发送命令,然后有一个进度条来显示目前的进度,一共向设备发送4次命令,一次放松完成之后要停下来一段时间,然后再发送另一条命令,进度条的显示包括发送命令的以及等待的时间,我发觉在autoresetevent.waitone时候,我等待的时间过去了之后,这里会继续再执行一条才会停止,这是为什么?
for(int i = 0;i<commlist.count;i++)
{
autoEvent.waitone();
timeRun();//这里是执行进度条的那个
String[] commstr = commlist[i] as string[];
runcommand(commstr,i);//这里是发送命令的方法
thread.sleep(time * 1000);//这里是上一个发送完后需要等待一段时间
}
我发觉我在把timer停止了之后,这一段会执行一遍才停下来,这个是为什么?
另执进度条的那个地方我也用了个timer。
可能是惯性吧 说实话这个问题我也不知道什么原因 因为当时对我程序没多大妨碍 所以就没深研究了~~~~
o(︶︿︶)o 唉,我后来改用了thread.suspend和thread.resume了
只要能实现想要的功能用什么方法无所谓