Qt SafeQueue 讀寫操作

2021-10-04 17:16:57 字數 1966 閱讀 6653

原始檔

#include "safequeue.h"

static int max_size=1<<31-1;

//使用qwaitcondition和qmutex可以實現比訊號量更精確的控制

void csafequeue::enqueue(const qintptr &t)

m_queue.enqueue(t);

qwarning() << "csafequeue::enqueue"<< m_queue.size();

m_nsize = m_queue.size();

emit(sizechanged(m_nsize));

m_mutex.unlock();

m_bufferisnotempty.wakeone();

}qintptr csafequeue::dequeue()

qwarning() << "csafequeue::dequeue"<< m_queue.size();

qintptr t = m_queue.dequeue();

m_nsize = m_queue.size();

emit(sizechanged(m_nsize));

m_mutex.unlock();

m_bufferisnotfull.wakeall();

return t;}/*

* qmutex

qmutex類提供的是執行緒之間的訪問順序化。

qmutex的目的是保護一段**,使得同一時間只有乙個執行緒可以訪問它。但在乙個執行緒中呼叫lock(),其它執行緒將會在同一地點試圖呼叫lock()時會被阻塞,直到這個執行緒呼叫unlock()之後其它執行緒才會獲得這個鎖。

qsemaphore

訊號量qsemaphore可以理解為對互斥量qmutex功能的擴充套件,互斥量只能鎖定一次而訊號量可以獲取多次,它可以用來保護一定數量的同種資源。acquire()函式用於獲取n個資源,當沒有足夠的資源時呼叫者將被阻塞直到有足夠的可用資源。release(n)函式用於釋放n個資源。

qsemaphore vacancy(5);       //空位資源

qsemaphore produce(0);       //產品數量

qmutex mutex;                //互斥鎖

int buffer[5];               //緩衝區可以放5個產品

int numtaken=60;

int takei=0;

class producer:public qthread

;void producer::run()         //生產者執行緒

}class consumer:public qthread

;void consumer::run()         //消費者執行緒

}int main(int argc, char *ar**)

*/

標頭檔案

#ifndef safequeue_h

#define safequeue_h

#include #include #include #include /*使用qwaitcondition控制 乙個生成者多個消費者的問題,寫入控制,讀取不控制 */

//template class csafequeue : public qobject

int size()

void enqueue(const qintptr &t);

qintptr dequeue();

private:

qqueuem_queue;

qmutex m_mutex;

qwaitcondition m_bufferisnotempty;

qwaitcondition m_bufferisnotfull;

int m_nsize;

};#endif // safequeue_h

讀寫檔案操作

匯入領導簡歷資訊 return public string leaderresumeimport throws ioexceptionelse if fr null fr.close if flag else fw.close string sjson outputclient sjson retu...

nand flash 讀寫操作

1 頁讀 如下所示,先輸入讀命令 0x00 然後輸入5個位址,分為2個列位址 頁內位址 和3個行位址 頁和block位址 再輸入讀確認位址0x30,nand硬體會自動從指定的頁的主儲存區讀資料到頁快取 頁暫存器 此時r b 為低電平,當內部讀完成後,r b 恢復為高電平,此時便可以通過nfc的資料暫...

檔案讀寫操作

函式原型 file fopen const char filename,const char mode 返回值 檔案順利開啟後,指向該流的檔案指標就會被返回。如果檔案開啟失敗則返回null,並把錯誤 存在errno中 引數 mode 說明 r read,已唯讀方式開啟檔案,檔案必須存在 w writ...