精华内容
下载资源
问答
  • PyQt5线程休眠和唤醒

    千次阅读 2019-03-22 13:59:13
    在上一篇文章中我有写线程的终止 挂起和唤醒,下面这个例子是线程休眠和唤醒,是通过线程内一个私有的属性来进行的,读者可以直接将代码跑起来 注:网上搜索的资源 #!/usr/bin/env python # -*- coding: utf-8 -*-...

    在上一篇文章中我有写线程的终止 挂起和唤醒,下面这个例子是线程的休眠和唤醒,是通过线程内一个私有的属性来进行的,读者可以直接将代码跑起来
    注:网上搜索的资源

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    from PyQt5.QtCore import QThread, QWaitCondition, QMutex, pyqtSignal
    from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QProgressBar
    
    class Thread(QThread):
    
        valueChange = pyqtSignal(int)
    
        def __init__(self, *args, **kwargs):
            super(Thread, self).__init__(*args, **kwargs)
            self._isPause = False
            self._value = 0
            self.cond = QWaitCondition()
            self.mutex = QMutex()
    
        def pause(self):
            print("线程休眠")
            self._isPause = True
    
        def resume(self):
            print("线程启动")
            self._isPause = False
            self.cond.wakeAll()
    
        def run(self):
            while 1:
                self.mutex.lock()
                if self._isPause:
                    self.cond.wait(self.mutex)
                if self._value > 100:
                    self._value = 0
                self._value += 1
                self.valueChange.emit(self._value)
                self.msleep(100)
                self.mutex.unlock()
    
    
    class Window(QWidget):
    
        def __init__(self, *args, **kwargs):
            super(Window, self).__init__(*args, **kwargs)
            layout = QVBoxLayout(self)
            self.progressBar = QProgressBar(self)
            layout.addWidget(self.progressBar)
            layout.addWidget(QPushButton('休眠', self, clicked=self.doWait))
            layout.addWidget(QPushButton('唤醒', self, clicked=self.doWake))
    
            self.t = Thread(self)
            self.t.valueChange.connect(self.progressBar.setValue)
            self.t.start()
    
        def doWait(self):
            self.t.pause()
    
        def doWake(self):
            self.t.resume()
    
    
    if __name__ == '__main__':
        import sys
        import cgitb
        sys.excepthook = cgitb.enable(1, None, 5, '')
        from PyQt5.QtWidgets import QApplication
        app = QApplication(sys.argv)
        w = Window()
        w.show()
        sys.exit(app.exec_())
    
    
    展开全文
  • 本文实例讲述了基于C++实现的线程休眠代码,分享给大家供大家参考。具体方法如下:linux平台示例如下:/*File : thread1.cAuthor : MikeE-Mail : Mike_Zhang@live.com*/#include #include #include void m_thread...

    本文实例讲述了基于C++实现的线程休眠代码,分享给大家供大家参考。具体方法如下:

    linux平台示例如下:

    /*

    File : thread1.c

    Author : Mike

    E-Mail : Mike_Zhang@live.com

    */

    #include

    #include

    #include

    void m_threadSleep(int sec,int nsec)

    {

    struct timespec sleepTime;

    struct timespec returnTime;

    sleepTime.tv_sec = sec;

    sleepTime.tv_nsec = nsec;

    nanosleep(&sleepTime, &returnTime);

    }

    void test1()

    {

    m_threadSleep(1,0);

    printf("I'm thread1 ...\r\n");

    }

    void test2()

    {

    m_threadSleep(2,0);

    printf("I'm thread2 ...\r\n");

    }

    int main()

    {

    pthread_t thread1,thread2;

    void *result;

    time_t tbegin,tend;

    tbegin = time(NULL);

    pthread_create(&thread1,NULL,(void*)&test1,NULL);

    pthread_create(&thread2,NULL,(void*)&test2,NULL);

    pthread_join(thread1,&result);

    pthread_join(thread2,&result);

    tend = time(NULL);

    printf("%d\r\n",tend-tbegin);

    return 0;

    }

    编译代码如下:

    gcc thread1.c -o thread1 -lpthread

    boost库实现示例如下:

    /*

    File : boost_thread1.cpp

    Author : Mike

    E-Mail : Mike_Zhang@live.com

    */

    #include

    #include

    #include

    boost::xtime getSleepTime(int sec,int nsec)

    {

    boost::xtime t;

    boost::xtime_get(&t, boost::TIME_UTC);

    t.sec += sec;

    t.nsec += nsec;

    return t;

    }

    void test1()

    {

    boost::this_thread::sleep(getSleepTime(1,500));

    std::cout <

    }

    void test2()

    {

    boost::this_thread::sleep(getSleepTime(3,500));

    std::cout <

    }

    int main(int argc, char* argv[])

    {

    boost::thread thrd1(&test1);

    boost::thread thrd2(&test2);

    std::time_t t_begin,t_end;

    t_begin = time(NULL);

    thrd1.join();

    thrd2.join();

    t_end = time(NULL);

    std::cout<

    return 0;

    }

    编译命令如下:

    g++ boost_thread1.cpp -o boost_thread1 -lboost_thread-mt

    希望本文所述对大家的C++程序设计有所帮助。

    展开全文
  • 前言 废话不多直接上代码,我用的jdk是11,所以如果代码跟贵兄的环境不兼容欢迎留言。... //测试线程休眠和唤醒 @Test public void testThread() throws InterruptedException { MyThread t1 = new MyThread();

    前言

    废话不多直接上代码,我用的jdk是11,所以如果代码跟贵兄的环境不兼容欢迎留言。

    代码

    
    import java.util.concurrent.atomic.AtomicBoolean;
    
    
    public class ThreadTest {
    
        //测试线程休眠和唤醒
        @Test
        public void testThread() throws InterruptedException {
    
            MyThread t1 = new MyThread();
    
            //执行线程
            t1.start();
    
            System.out.println("main thread to sleep");
            Thread.sleep(3000);
            System.out.println("main thread t1 notify");
    
            //唤醒线程
            t1.keep();
    
            Thread.sleep(3000);
    
            System.out.println("test end");
        }
    
    
        /**
         * 测试的线程
         */
        private static class MyThread extends Thread {
    
            private AtomicBoolean wait = new AtomicBoolean(false);
    
            @Override
            public void run() {
                System.out.println("t1 run start");
    
                //休眠
                this.hold();
    
                System.out.println("t1 run end");
            }
    
            /**
             * 休眠线程
             */
            public void hold(){
                synchronized (wait){
                    if(this.wait.get()){
                        return;
                    }
                    this.wait.set(true);
                    try {
                        this.wait.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
    
            /**
             * 唤醒线程
             */
            public void keep(){
                synchronized (wait){
                    if(!this.wait.get()){
                        return;
                    }
                    this.wait.set(false);
                    this.wait.notify();
                }
            }
    
        }
    
    }
    

     

    展开全文
  • java 参赛者的比赛生活(线程休眠唤醒) java 参赛者的比赛生活(线程休眠唤醒) java 参赛者的比赛生活(线程休眠唤醒
  • 线程-休眠和唤醒

    千次阅读 2017-01-06 16:45:23
    ThreadState是一个枚举类型,它反映的是线程所处的状态。当一个Thread实例刚创建时,它的ThreadState是Unstarted;当此线程被调用Start()启动之后,它的ThreadState是 Running; 在此线程启动之后,如果想让它暂停...

    ThreadState是一个枚举类型,它反映的是线程所处的状态。当一个Thread实例刚创建时,它的ThreadState是Unstarted;当此线程被调用Start()启动之后,它的ThreadState是 Running;  在此线程启动之后,如果想让它暂停(阻塞),可以调用Thread.Sleep() 方法,它有两个重载方法(Sleep(int )、Sleep(Timespan )),只不过是表示时间量的格式不同而已,当在某线程内调用此函数时,它表示此线程将阻塞一段时间(时间是由传递给 Sleep 的毫秒数或Timespan决定的,但若参数为0则表示挂起此线程以使其它线程能够执行,指定 Infinite 以无限期阻塞线程),此时它的ThreadState将变为WaitSleepJoin,当某线程处于WaitSleepJoin状态而又不得不唤醒它时,可使用Thread.Interrupt 方法 ,它将在线程上引发ThreadInterruptedException,

    static void Main(string[] args)

       Thread t1 = new Thread(new ThreadStart(Thread1));
        t1.Start();
          t1.Interrupt ();
         E.WaitOne ();
         t1.Interrupt ();
              t1.Join();
              Console.WriteLine(“t1 is end”);
    }
    static AutoResetEvent E = new AutoResetEvent(false);
    public static void Thread1()
    {   
       try
       {//从参数可看出将导致休眠
        Thread.Sleep(Timeout.Infinite); 
       }
       catch(System.Threading.ThreadInterruptedException e)
       {//中断处理程序
        Console.WriteLine (" 1st interrupt");
       }
         E.Set ();
       try
       {// 休眠
        Thread.Sleep(Timeout.Infinite ); 
       }
       catch(System.Threading.ThreadInterruptedException e)
       {
         Console.WriteLine (" 2nd interrupt");
       }//暂停10秒
               Thread.Sleep (10000); 
            }
    运行结果为:1st interrupt
                      2nd interrupt
                      (10s后)t1 is end


       Thread t1 = new Thread(new ThreadStart(Thread1));
        t1.Start();
          t1.Interrupt ();
         E.WaitOne ();
         t1.Interrupt ();
              t1.Join();
              Console.WriteLine(“t1 is end”);
    }
    static AutoResetEvent E = new AutoResetEvent(false);
    public static void Thread1()
    {   
       try
       {//从参数可看出将导致休眠
        Thread.Sleep(Timeout.Infinite); 
       }
       catch(System.Threading.ThreadInterruptedException e)
       {//中断处理程序
        Console.WriteLine (" 1st interrupt");
       }
         E.Set ();
       try
       {// 休眠
        Thread.Sleep(Timeout.Infinite ); 
       }
       catch(System.Threading.ThreadInterruptedException e)
       {
         Console.WriteLine (" 2nd interrupt");
       }//暂停10秒
               Thread.Sleep (10000); 
            }
    运行结果为:1st interrupt
                      2nd interrupt
                      (10s后)t1 is end

    展开全文
  • java线程休眠和唤醒

    2016-02-10 08:02:29
    public class thread5{ public static void main(String[] args){ compute t=new compute();...以上程序本意是要输出1后休眠10秒后输出2,可是运行后,程序直接输出12,根本没有休眠就被唤醒输出了,这是为何呢?
  • package practice; public class WaitNotifyCase { public static void main(String[] args) { Object obj = new Object(); // 创建唯一的锁对象 new Thread() { // 匿名... i++) { // 循环执行三次等待与唤醒
  • Treead中使用wair() notify() /*需求: 使用双线程交替打印1,2,3,4....... eg: T11 ------->1 T22 ------->2 ...
  • 初学线程休眠和礼让

    2021-05-02 19:10:36
    线程休眠,sleep() 1、休眠可以使一个线程暂缓处理,休眠时间一到程序就会唤醒继续执行,在Thread类中定义的休眠方法如下: 休眠方法一:public static void sleep(long millis) throws InterruptedException; 休眠...
  • Linux进程休眠和唤醒

    2019-05-04 12:13:15
    Linux进程休眠和唤醒
  • * 使用object的wait方法notify方法以及notifyAll 方法必须依赖于synchronized 关键字的方法或代码块 */ public class WaitThread { private int i=0; private Object object = new Object(); /** * 奇数...
  • 即开启一个子线程获取广告资源,LaunchScreen停留在当前界面,即需要主线程先休眠,当子线程的广告资源获取完成,立即唤醒主线程直接展示广告资源。查了一些资料,发现此类文章不是很多,以下是我的收获:利用...
  • 线程休眠和恢复
  • 线程休眠sleepwait

    2020-04-02 17:07:45
    我们都知道,休眠线程有两种方法,那就是sleep()wait() 先简单了解一下这两个方法: 1.sleep 是Thread里的方法 static修饰,“类名.”调用即可 设置的时间一到,自动会醒过来继续执行 2.wait 是Object里的方法 ...
  • 多线程-线程休眠(sleep)

    千次阅读 2018-11-13 23:01:17
    sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,...
  • 线程休眠基本概念 基本概念 sleep() 方法定义在Thread类中 sleep()方法的作用: ...当线程休眠的时间大于或者等于该休眠时间时,线程被唤醒,会由 [阻塞状态] 进入 [就绪状态], 等待CPU的调度执行 ...
  • java多线程--线程休眠

    千次阅读 2016-06-23 10:50:02
    sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,...
  • 线程休眠sleepsleep线程休眠方式休眠当前线程wait线程通讯机制wait举例wait方法面试问题wait 为什么要加锁?wait 为什么要释放锁?Thread.sleep(0) Object.lock(0) 区别wait sleep 的区别为什么 wait 会放到 ...
  • 07之 线程休眠

    2019-07-03 15:35:28
    sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,...
  • 休眠唤醒

    2021-04-15 15:07:59
    1、用户程序通过休眠唤醒机制获取按键值图示 2 重要函数分析 这里,我们重点分析两个函数。 1)、休眠函数 2)、唤醒函数 函数分析: wake_up函数哪里找到要唤醒的进程或者线程呢? 答案就是他的参数...
  • 如何在一个线程中指定休眠唤醒另一个线程背景及问题:在线一个聊天的程序,客户端有两个线程:AB。服务器发送一个消息到客户端,这两个线程都有接收的功能,想让A接收消息而阻塞B不让他接收。办法:1. 线程B用来...
  • 线程休眠(sleep方法) 线程休眠:让线程暂缓执行,等到预计时间之后再恢复执行。 线程休眠会交出cpu,让cpu去执行其他任务,但是不会释放锁。 比如:当前线程sleep休眠了,但是如果此线程在休眠前持有某个对象的锁,...
  • Java中的线程让步会让线程让出优先级,而休眠则会让线程进入阻塞状态等待被唤醒,这里我们对比线程等待的wait()方法,来详解Java中的线程让步yield()与线程休眠sleep()方法
  • 如何唤醒或者退出被阻塞,休眠线程,非TerminateXXX方法
  • Thread--线程休眠sleep

    千次阅读 2017-03-29 17:18:20
    sleep()的作用是让当前线程进入休眠,当前线程会由运行状态进入到阻塞状态,sleep()可以指定休眠时间,休眠时间会大于等于该休眠时间,在线程被重新唤醒时,线程的状态由阻塞状态变成就绪状态,从而等待CPU进行调度...
  • sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,971
精华内容 15,988
关键字:

线程休眠和唤醒