原创 POSIX讀寫鎖

續接上一篇“線程同步”:https://blog.csdn.net/zy010101/article/details/105967289 本文講述讀寫鎖。讀寫鎖和互斥量不太一樣,它允許鎖可以是讀加鎖,寫加鎖以及未加鎖三種狀態。每次只能由一

原创 Linux下多線程的實現(基於pthread庫)

Linux內核在2.2版本中引入了類似線程的機制。Linux提供的vfork函數可以創建線程,此外Linux還提供了clone來創建一個線程,通過共享原來調用進程的地址空間,clone能像獨立線程一樣工作。Linux內核的獨特,允許共享地

原创 線程清理(pthread_cleanup_push函數和pthread_cleanup_pop函數)

看了一會兒,沒看懂這個,絕了。書上寫的顛三倒四。文檔給每個函數兩句話。也是沒看懂啊! 先把代碼試着跑一跑,調試一下,看看結果怎麼樣。 #include<pthread.h> #include<stdio.h> #include<std

原创 標準I/O庫(ISO C的標準I/O庫)

本文講述由ISO C定義的標準I/O庫。這個庫已經擁有非常長的歷史了,它由D.R.在1975年左右編寫,現在已經過去45年了。但是ISO C幾乎沒有對標準I/O庫做出修改。不用我說,大家也知道這個庫存在的問題應該是非常多的。 標準輸入,標

原创 無他,惟手熟爾

                                                賣油翁 陳康肅公善射,當世無雙 ,公亦以此自矜。嘗射於家圃,有賣油翁釋擔而立,睨之久而不去。見其發矢十中八九,但微頷之。   康肅問曰:“汝亦

原创 Qt繪圖事件

Qt的繪圖是在繪圖事件中完成的。整個繪圖系統基於QPainter,QPainterDevice和QPaintEngine三個類。 QPainter是用來繪製的,QPainterDevice是繪圖設備,QPainter會把圖繪製在QPain

原创 C/C++未定義行爲

下面是一段代碼,這段代碼中有標準未定義的行爲。代碼如下: #include<iostream> using namespace std; int main() { int j = 0; for (int i =

原创 Qt繪製COS函數

Qt的繪圖系統是極其強大的。下面來展示一下繪製自定義圖形的大致繪圖方式。 void MainWindow::paintEvent(QPaintEvent *event) { // paint = new QPainter(this

原创 Qt中常見的錯誤

信號函數或者槽函數有多個重載。 例如: valueChanged()函數有兩個重載,那麼我們在使用這個信號的時候就需要使用一個函數指針明確的指向其中一個函數。例如: void (QSpinBox:: *p)(int) = &QSpin

原创 Qt模塊介紹

Qt5中,模塊已經非常細化了,關於模塊的詳細信息可以在幫助文檔中看到。Qt的幫助文檔叫Qt助手。爲了方便使用,我們一般都是把它固定在任務欄。 Qt Core模塊:                  提供核心的非 GUI 功能,所有模塊都需

原创 QDockWidget和setCentralWidget

本文承接上文:Qt創建菜單欄,工具欄,狀態欄 本篇將介紹主窗口剩下的Dock Widget Area和Center Widget。在Qt中,使用QDockWidget來創建浮動窗口。而Center Widget則可以是任何能放到中間區域的

原创 Qt顯示Hello World

#include "widget.h" //對於 Qt 程序來說,GUI 程序是QApplication //非 GUI 程序是QCoreApplication。QApplication派生自QCoreApplication #in

原创 模板的一些語法問題

模板無疑是非常複雜的,一個模板類。你把成員函數實現在類內,是比較簡單的。當然,你也可以實現在類外。這時候你有兩個選擇,在同一個文件實現成員函數,在另一個.cpp裏實現成員函數,頭文件只包含函數聲明。 當你寫在同一個文件裏的時候,只需要在函

原创 C++之函數模板(一)

C++是一門非常強大,非常複雜,非常龐大的語言。C++本身從C語言發展而來,它一開始就具備了面向過程編程和麪向對象編程這兩種編程範式(編程風格,其實就是程序設計的不同哲學理念)。後來隨着C++的逐步發展,它支持了泛型編程。本文將要介紹的函

原创 C++之構造函數

構造函數 構造函數是C++類用來初始化屬性成員的方式。一個類的構造函數名和類名一致,構造函數沒有返回值,也不能使用void來修飾。 當你沒顯式定義構造函數的時候,C++會給你一個默認構造函數,他什麼都不做。如果你定義了自己的構造函數,那麼