class MainWidget : public QWidget{ Q_OBJECT public: thread1 *t1; thread2 *t2; view_iko *view1; QMutex mutex;public slots: void startWorking(){ t1->start(); t2->start(); isrunning=true; }
#include <QThread>#include "pcap.h"class thread1 : public QThread{ Q_OBJECTpublic: explicit thread1(QObject *parent = 0); ~thread1(); pcap_t *handle;private: int gotpacket();protected: void run();};
void thread1::run(){ bool ch; while(1){ mw->mutex.lock(); // mw - это указатель на класс MainWidget ch=true; while(ch){ Data = pcap_next(handle,&header); if (Data !=0) if(gotpacket()==111)ch=false; } mw->mutex.unlock(); }}
#include <QThread>#include <QtCore>class thread2 : public QThread{ Q_OBJECTpublic: thread2();protected: void run();private: void func1(); void func2(); void func3(); void func4(); void func5(); void func6(); void func7(); void func8();signals: void ready();};
void thread2::run(){ int count; while(1) { mw->mutex.lock(); func1(); func2(); func3(); func4(); func5(); func6(); func7(); count++; mw->mutex.unlock(); }}
C++ (Qt)QSemaphore theSemaphore1(1), theSemaphore2(0); void thread1::run(){ bool ch; while(1) { theSemaphore1.acquire(); // ждем конца обработки ch=true; while(ch){ Data = pcap_next(handle,&header); if (Data !=0) if(gotpacket()==111)ch=false; } theSemaphore2.release(); // открываем семафор thread2 }} void thread2::run(){ int count; while(1) { theSemaphore2.acquire(); // ждем конца чтения func1(); func2(); func3(); func4(); func5(); func6(); func7(); count++; theSemaphore1.release(); // открываем семафор thread1 }}