原创 線程的互斥和同步(3)- Windows的互斥鎖

什麼是互斥鎖/互斥量? 在編程中,引入了對象互斥鎖的概念,來保證共享數據操作的完整性。每個對象都對應於一個可稱爲" 互斥鎖" 的標記,這個標記用來保證在任一時刻,只能有一個線程訪問該對象;選自百度百科-互斥鎖。 同一時刻只有一個線

原创 線程的互斥和同步(5)- Windows的信號量Semaphore

信號量也是線程間同步常用的手段之一。舉個例子,比如我們要去餐館吃飯,這家餐館一共有4個位置,我們一共是6個人。那麼就會4個人先去吃飯,等他們吃完了,剩下的2個人再去吃飯,如果再來人則需要判斷是否有空位置,如果有直接坐下吃飯,如果沒

原创 線程的互斥和同步(2)- Windows的臨界區

臨界區是指程序中的多個線程訪問同一個受保護的代碼段,臨界區的代碼段同一時刻只允許一個線程執行。 使用臨界區對象 CriticalSection ,來實現對臨界區的操作。 下面是一些過於臨界區操作的主要函數: Initialize

原创 基於Qt的簡易Http下載軟件

文章目錄1. 發送head請求獲取文件大小信息2. 發送獲取部分文件請求3. 設置代理 一個簡單的Http下載軟件,支持 斷點續傳 ,文件下載完成後可直接預覽,不過下載速度一般(每次請求大約10K的數據量,也沒有使用多線程切片下

原创 使用Qt中的QThread創建線程

文章目錄1. 使用信號和槽的形式觸發2. 使用繼承自QThread方式觸發3. 幾點說明 上篇文章中簡單介紹瞭如何使用 Windows API 和c++11中的 std::thread 創建線程。 線程的創建和基本使用 本篇文章

原创 Qt自定義ColorDialog(支持RGB和HSV)

文章目錄1. HSV和RGB2. H分量圓盤繪製3. SV畫布繪製 當我們做軟件開發的時候,經常需要編輯顏色,有時需要同時編輯RGB和HSV的顏色。 這是一個自定義的顏色對話框,如下圖所示 具有如下功能: 支持RGB和HS

原创 Qt繪製文字輪廓

首先看一下使用Qt繪製文字輪廓效果: 這裏使用 QPainter 中的 strokePath 函數實現文字輪廓的繪製。 void QPainter::strokePath(const QPainterPath &path, c

原创 使用Windows API實現自定義線程類CThread

我們在使用QThread的時候,只需要繼承QThread重新實現 run() 函數就可以了,使用起來很方便,接下來就介紹一種實現自定義的類 CThread ,只要繼承 CThread 後,重新實現 run() 函數即可。 關於 Q

原创 字符串四則運算表達式求值

四則表達式求值示例: 示例中的運算式子爲10+20-30+4*(20-10+20*10-100),運算結果爲440 1. 後綴表達式 對於四則運算表達式,如 10+20-3*(10-5)+8 ,我們如何用程序實現這個運算表達式求

原创 內存池的簡單實現

文章目錄1. 內存單元2. 內存塊3. 內存池 當我們頻繁的申請內存(new、malloc) 和 釋放內存(delete、free) 時,會產生內存碎片,而且申請和釋放內存也會增加時間的消耗。內存池就是爲了解決該問題,提高效率產

原创 Windows中的GDI

文章目錄1. 設備環境2. 繪製線條3. 繪製區域 Windows 圖形設備接口(Graphics Device Interface, GDI)使應用程序能夠在視頻顯示器使用圖形和格式化文本。 1. 設備環境 設備環境是Wind

原创 Windows響應鍵盤鼠標事件

文章目錄1. 接收鍵盤的輸入2. 接收鼠標輸入3. SendMessage和PostMessage 上篇文章中講了如何創建一個簡單的Win32的窗口,這篇文章簡單講一下如何響應鼠標和鍵盤事件。 1. 接收鍵盤的輸入 當一個按鍵被

原创 創建一個Win32窗口

文章目錄1. GUI入口函數2. 創建窗口一.註冊窗口類(1) 指定窗口類的風格(2)指定窗口處理函數地址(3) 本程序的實例句柄傳給hInstance成員(4) 設置圖標和光標(5)指定窗口重畫客戶區畫刷(6)指定窗口類名稱二、

原创 TCP/IP 學習筆記(2)- 套接字類型與協議設置

文章目錄1. 協議族2. 套接字類型(1)面向連接的套接字(SOCK_STREAM)(2)面向消息的套接字(SOCK_DGRAM)3. 協議的最終選擇4. Windows中的socket函數 上一篇文章我們簡單講了TCP服務端和

原创 STL學習筆記(4)- STL算法導論for_each和仿函數

STL提供了 for_each 函數,對容器某個範圍內的提供統一的函數調用的函數。 下面是一個 for_each 的基本用法示例,將數組 vector 中的每一個元素內容* 2 使用 for_each 時,需要使用頭文件 <alg