<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 /></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 /></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 /></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 /></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 /></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 /></li><li>#include <qsemaphore><br /></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 /></li><li>{<br /></li><li>freebyte.acquire();<br /></li><li>qdebug()<<"produer:"<<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 /></li><li>{<br /></li><li>usebyte.acquire();<br /></li><li>qdebug()<<"consumer:"<<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 /></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 /></li><li>#include <qmutex><br /></li><li>#include <qwaitcondition><br /></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 /></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 /></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>
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号