时间:2021-07-01 10:21:17 帮助过:6人阅读
- <ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>#ifndef MYTHREAD_H<br> </li><li>#define MYTHREAD_H<br></li><li><br></li><li>#include <qthread><br></qthread></li><li><br></li><li>class MyThread : public QThread<br></li><li>{<br></li><li>Q_OBJECT<br></li><li>public:<br></li><li>MyThread();<br></li><li>void stop();<br></li><li>volatile bool stopped;<br></li><li>protected:<br></li><li>void run();<br></li><li>};<br></li><li>#endif</li></ol>
- <ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>#include "myThread.h"<br> </li><li>#include <qtdebug><br></qtdebug></li><li><br></li><li>MyThread::MyThread()<br></li><li>{<br></li><li>stopped = false;<br></li><li>}<br></li><li><br></li><li>void MyThread::run()<br></li><li>{<br></li><li>int i=0;<br></li><li>while(!stopped)<br></li><li>{<br></li><li>qDebug()<<"thread id:"<qthread::currentthreadid()<<":"<<i;<br></qthread::currentthreadid()<<":"<<i;<br></li><li>i++;<br></li><li>sleep(2);<br></li><li>}<br></li><li>stopped = false;<br></li><li>}<br></li><li><br></li><li>void MyThread::stop()<br></li><li>{<br></li><li>stopped = true;<br></li><li>} </li></ol>
- <ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>#ifndef PRODUCER_H<br> </li><li>#define PRODUCER_H<br></li><li><br></li><li>#include <qthread><br></qthread></li><li><br></li><li>class Producer : public QThread<br></li><li>{<br></li><li>Q_OBJECT<br></li><li>public:<br></li><li>Producer();<br></li><li>protected:<br></li><li>void run();<br></li><li>};<br></li><li><br></li><li>#endif</li></ol>
- <ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>#ifndef CONSUMER_H<br> </li><li>#define CONSUMER_H<br></li><li><br></li><li>#include <qthread><br></qthread></li><li><br></li><li>class Consumer : public QThread<br></li><li>{<br></li><li>Q_OBJECT<br></li><li>public:<br></li><li>Consumer();<br></li><li>protected:<br></li><li>void run();<br></li><li>};<br></li><li><br></li><li>#endif</li></ol>
- <ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>#include "producer.h"<br> </li><li>#include "consumer.h"<br></li><li>#include <qdebug><br></qdebug></li><li>#include <qsemaphore><br></qsemaphore></li><li><br></li><li>#define SIZE 50<br></li><li>QSemaphore freeByte(SIZE);<br></li><li>QSemaphore useByte(0);<br></li><li><br></li><li>Producer::Producer()<br></li><li>{<br></li><li><br></li><li>}<br></li><li>void Producer::run()<br></li><li>{<br></li><li>for(int i=0; i<size; i++)<br=""></size;></li><li>{<br></li><li>freeByte.acquire();<br></li><li>qDebug()<<"produer:"<<i;<br></i;<br></li><li>useByte.release();<br></li><li>sleep(1);<br></li><li>}<br></li><li>}<br></li><li>Consumer::Consumer()<br></li><li>{<br></li><li><br></li><li>}<br></li><li>void Consumer::run()<br></li><li>{<br></li><li>for(int i=0; i<size; i++)<br=""></size;></li><li>{<br></li><li>useByte.acquire();<br></li><li>qDebug()<<"consumer:"<<i;<br></i;<br></li><li>freeByte.release();<br></li><li>sleep(2);<br></li><li>}<br></li><li>} </li></ol>
- <ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>#ifndef THREAD_H<br> </li><li>#define THREAD_H<br></li><li><br></li><li>#include<qthread><br></qthread></li><li><br></li><li>class Producer : public QThread<br></li><li>{<br></li><li>Q_OBJECT<br></li><li>public:<br></li><li>Producer();<br></li><li>protected:<br></li><li>void run();<br></li><li>};<br></li><li><br></li><li>class Consumer : public QThread<br></li><li>{<br></li><li>Q_OBJECT<br></li><li>public:<br></li><li>Consumer();<br></li><li>protected:<br></li><li>void run();<br></li><li>};<br></li><li><br></li><li>#endif</li></ol>
- <ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>#include "thread.h"<br> </li><li>#include <qdebug><br></qdebug></li><li>#include <qmutex><br></qmutex></li><li>#include <qwaitcondition><br></qwaitcondition></li><li><br></li><li>QMutex mutex;<br></li><li>QWaitCondition empty, full;<br></li><li>int num=0;<br></li><li>int buffer[50];<br></li><li>int useByte=0;<br></li><li><br></li><li><br></li><li>Producer::Producer()<br></li><li>{<br></li><li><br></li><li>}<br></li><li>void Producer::run()<br></li><li>{<br></li><li>for(int i=0; i<50; i++)<br></li><li>{<br></li><li>mutex.lock();<br></li><li>if(useByte==50)<br></li><li>empty.wait(&mutex);<br></li><li>num++;<br></li><li>buffer[i] = num;<br></li><li>qDebug()<<"producer:"<<num;<br></num;<br></li><li>useByte++;<br></li><li>full.wakeAll();<br></li><li>mutex.unlock();<br></li><li>sleep(1);<br></li><li>}<br></li><li>}<br></li><li>Consumer::Consumer()<br></li><li>{<br></li><li><br></li><li>}<br></li><li>void Consumer::run()<br></li><li>{<br></li><li>for(int i=0; i<50; i++)<br></li><li>{<br></li><li>mutex.lock();<br></li><li>if(useByte==0)<br></li><li>full.wait(&mutex);<br></li><li>qDebug()<<"consumer"<<buffer[i];<br></buffer[i];<br></li><li>useByte--;<br></li><li>empty.wakeAll();<br></li><li>mutex.unlock();<br></li><li>sleep(2);<br></li><li>}<br></li><li>} </li></ol>
http://www.bkjia.com/PHPjc/1103190.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1103190.htmlTechArticlelesson15-QT多线程 一、什么是线程 1、线程 进程:一个正在执行的程序,它是资源分配的最小单位 线程:程序执行的最小单位 进程出现了很...