原始檔
#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...