精华内容
下载资源
问答
  • 控制线程暂停的方法: 线程的同步用到了QMutex类,作为一个互斥锁控制进行保护。如果在主进程中把线程里面的互斥锁获取,那么线程中再次获取该锁就会失败,引起线程阻塞,主进程执行操作结束后,释放该锁,线程就会...

    需要线程停止的目的:

    有时开启一个线程是为了把耗时的操作转移到线程中执行,主进程中可以执行其它的任务,避免了因为大量的重复性操作导致主进程阻塞。

    控制线程暂停的方法:

    线程的同步用到了QMutex类,作为一个互斥锁控制进行保护。如果在主进程中把线程里面的互斥锁获取,那么线程中再次获取该锁就会失败,引起线程阻塞,主进程执行操作结束后,释放该锁,线程就会再次启动。以上思路实现了线程的暂停和开启。

    具体实现代码:

    1、线程中代码框架

    void thread::run(){
        mutex.lock();    //获得锁
        /*********/
        /........../
        mutex.unlock();  //释放锁
    }

    2、主进程中代码

    void mainwindows::doSomething(){
        thread.mutex.lock();
        /*****************/
        thread.mutex.unlock();
    }

    中途停止线程的方法

    Qt线程的停止可通过三种方式实现:

    1、利用quit(或者exit(0))

    this.quit();

    2、使用terminate

    this.terminate();

    this.wait();

    3、利用volatile

            一种是使用标志位,这种方法最好,在while循环中使用标志位判断是否满足进行循环的条件,并在run函数结束时将stoped置为初始化的值false。(stop定义:volatile bool stopped)

    第三中方法线程还在运行,只不过运行的内容是空的。

    测试第二中方法可以实现中途停止线程。

    展开全文
  • MainTest类中可以控制线程暂停或继续运行... * 这个线程操作另一个线程暂停或开始 * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Thread1 th1 = new T

    MainTest类中可以控制线程的暂停或继续运行。

    public class MainTest {
    
    	/**
    	 * 这个线程操作另一个线程的暂停或开始
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Thread1 th1 = new Thread1();
    		Thread t1 = new Thread(th1);
    		t1.start();
    		try {
    			Thread.sleep(20);
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		//thread线程暂停
    		th1.wait1();
    		try {
    			Thread.sleep(2000);
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		//thread线程继续运行
    		th1.start1();
    		//th1.wait1();
    		//th1.start1();
    	}
    
    }
    

    下面是thread类

    public class Thread1 implements Runnable {
    	private String flag = "start";
    	private String control = "";
    
    	public void run() {
    		// TODO Auto-generated method stub
    		int i = 0;
    		while (true) {
    			if (flag.equals("start")) {
    				i++;
    				System.out.println("The thread1 is running" + i);
    			} else if (flag.equals("wait")) {
    				try {
    					System.out.println("===wait===");
    					synchronized (control) {
    						control.wait();
    					}
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    		}
    	}
    
    	public void wait1() {
    		this.flag = "wait";
    	}
    
    	public void start1() {
    		this.flag = "start";
    		if (flag.equals("start")) {
    			synchronized (control) {
    				control.notifyAll();
    			}
    		}
    	}
    
    }
    
    定义了一个标志位。还利用了synchronized同步关键字

    展开全文
  • 执行AfxBeginThread()函数时,如果成功则返回一个指向新线程对象的CWinThread指针,否则为NULL。 这样只要得到这一新线程的指针,我们就可以对新线程进行操作了。 向对话框类里面添加一个CWinThread* mythread 的...

    执行AfxBeginThread()函数时,如果成功则返回一个指向新线程对象的CWinThread指针,否则为NULL。就是说它会new一个CWinThread对象,而这个对象在线程运行结束时是会自动删除的。

    这样只要得到这一新线程的指针,我们就可以对新线程进行操作了。

    向对话框类里面添加一个CWinThread* mythread 的成员变量,不用初始化为NULL,这样会报错的,因为它只能通过AfxBeginThread函数获得。
    然后添加一个 pause 按钮向其响应函数里面添加代码 mythread->SuspendThread();   再添加一个 resume按钮,向其响应函数里面添加 mythread->ResumeThread();

    要结束一个线程可以在线程内调用AfxEndThread将会直接结束线程,此时线程的一切资源都会被回收。注意在线程中使用了CString类,则不能用AfxEndThread来进行结束线程,会有内存泄漏,只有当程序结束时,会在输出窗口有提示多少byte泄漏了。因为Cstring的回收有其自己的机制。建议在AfxEndThread之前先进行return。


    展开全文
  • 易语言线程暂停与继续源码,线程暂停与继续,子程序1,挂起线程,恢复线程,创建线程,销毁线程
  • C# 如何实现一个线程暂停和继续

    万次阅读 2012-03-06 15:25:58
    // 当textBox1的文本超过4位,发一个通知 } } AutoResetEvent detailCollectedEvent = new AutoResetEvent(false); void YourThread() { MessageBox.Show("input you bank account details into the textbox...
    using System;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
    
    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Thread th = new Thread(YourThread);
                th.Start();
            }
    
            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (textBox1.Text.Length >= 4)
                {
                    detailCollectedEvent.Set();                      // 当textBox1的文本超过4位,发一个通知
                }
            }
    
            AutoResetEvent detailCollectedEvent = new AutoResetEvent(false);
            void YourThread()
            {
                MessageBox.Show("input you bank account details into the textbox");
                detailCollectedEvent.WaitOne();                      // 等候通知
                MessageBox.Show("we will keep the secret.");
            }
        }
    }

    展开全文
  • 主要是 Java 并发, 停止线程的方法分析
  • Java多线程编程-停止线程 暂停线程

    千次阅读 2017-04-05 16:16:08
    停止线程停止线程是在多线程开发中很重要的技术点,个人总结停止线程有下面三种方法 *
  • 如何优雅地停止一个线程

    千次阅读 2019-09-03 09:11:57
    Java 中 Thread 类有一个 stop() 方法,可以终止线程,不过这个方法会让线程直接终止,在执行的任务立即终止,未执行的任务无法反馈,所以 stop() 方法已经不建议使用。 既然 stop() 方法如此粗暴,不建议使用,...
  • java多线程---停止、暂停一个线程

    千次阅读 2016-05-28 23:13:12
    2.使用interrupt方法:调用线程的这个方法会修改线程的中断标志位真,可以通过interrupted和isInterrupted这两个方法来判断线程是否已经被中断,区别是第一个方法在调用之后会把状态改为false,第二个方法则不会 ...
  • 为了能让其他线程有机会运行,一个线程有10种方式可以暂停或者指示它准备暂停.主要分为下面几种方式: (1)可以对I/O阻塞 (2)可以对同步对象阻塞 (3)可以放弃 (4)可以休眠 (5)可以连接另一个线程 (6)可以等待一个...
  • 线程():创建线程线程的常用方法

    万次阅读 多人点赞 2018-09-01 19:14:23
    了解并发编程:实际工作中很少写多线程的代码,这部分代码一般都被人封装起来了,在业务中使用多线程的机会也不是很多(看具体项目),但是作为一个高级程序员如果不会多线程是说不过去的。 二:进程与线程 ...
  • Java多线程之暂停线程

    千次阅读 2019-08-11 01:23:13
    暂停线程 暂停线程意味着此线程还可以恢复运行。在Java多线程中,suspend()方法可以暂停线程,resume()方法可以恢复线程。 这两方法都是已经过时的方法。 1.8.1suspend与resume方法的使用 package ...
  • java线程如何暂停暂停的时间未知。之后又可以在程序中唤醒呢?
  • C++线程暂停

    千次阅读 2013-12-19 11:11:43
    线程中,线程需要暂停的原因多种多样,基本分为两大类,1是等待数据,2是系统资源紧张,停止计算以把资源...这两个API的问题是无法确定函数被暂停的位置,这是一个足以让任何多线程程序崩溃的问题。想象一种情况,A线
  • C#:线程(3):线程暂停

    千次阅读 2018-07-19 10:57:21
    线程暂停是让某一个线程先休眠一段时间,在这段时间内,该线程不占用系统资源 用一个例子说明线程休眠,除了主函数还有另一个线程,主函数会输出从11到19的数字,而线程会每隔两秒输出从1到9的数 (一):首先建立...
  • 1、线程暂停 2、线程恢复 3、线程全部暂停 4、线程全部恢复 这里的暂停和恢复只是设置暂停恢复的标识,在UI里显示,而真正控制暂停恢复的是—脚本延时 511遇见易语言多线程大漠多线程 多线程全部暂停恢复 ....
  • Android Java 线程暂停与继续

    千次阅读 2016-08-05 10:40:42
    突然碰到一个问题,线程暂停与继续,我想了想,去使用JDK给我们提供的suspend方法、interrupt方法??suspend()方法让这个线程与主线程都暂停了,谁来唤醒他们??明显这个不好用,要用的话,恐怕得另写唤醒线程了...
  • 如何暂停线程

    千次阅读 2020-10-01 18:22:12
    和终止线程不同,暂停线程意味着此线程还可以恢复,在 Java 中,可以使用 suspend() 方法暂停线程,然后使用 resume() 方法恢复线程的执行。 首先通过一个例子来了解一下这两个方法的基础用法,代码如下: public ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 182,561
精华内容 73,024
关键字:

一个线程暂停另外一个线程