原创 C++系列 --- 信號量同步詳解

一、線程同步 1、線程同步 多線程程序設計大多會涉及線程間相互通信。主線程在創建工作線程以後,工作線程之間還需要通過通信機制來協同工作。一種比較好的方法就是使用事件內核對象。 事件內核對象是一種用於多線程同步和他們之間的通信手段。 同步可

原创 C++系列 --- 消息機制原理(事件驅動)

1、消息 消息簡單的說就是通過輸入設備向程序發出指令要執行某個操作。具體的操作是你寫的一系列代碼,稱爲消息處理函數。   在SDK中消息其實非常容易理解,當窗口建立後便會有一個函數(窗口處理函數)開始執行一個消息循環,我們還可以清楚的看到

原创 C++系列 --- Interlock和CreateMutex中線程鎖的代價原理剖析

一、雙線程的併發  1、兩個變量自加操作進行雙線併發操作     2、實例 #include <iostream> #include <Windows.h> #include <process.h> using namespace st

原创 C++系列 --- 低優先級的線程爲什麼會被先執行

一、線程的優先級 線程的優先級範圍從0(最低)到31(最高)。當你產生線程時,並不是直接以數值制定某優先級,而是採用兩個步驟。 第一個步驟是指定“優先級等級(Priority Class)”給進程,第二步驟是指定“相對優先級”給該進行的所

原创 C++系列 --- 線程同步臨界區原理

1、臨界區對象 臨界區對象是定義在數據段中的一個CRITICAL_SECTION結構,Windows內部使用這個結構記錄一些同步信息,確保在同一段時間只有一個線程訪問數據段中的數據。 臨界區對象相關函數: // 初始化臨界區對象資源 v

原创 C++系列 --- 檢查程序只有一個運行實例以及自動隱藏控制檯

一、檢查程序只有一個運行實例 通過創建CreateMutex #include <iostream> #include <Windows.h> using namespace std; int main() { cout << "

原创 C++系列 --- 操作系統亂序推進線程指令的本質剖析

C/C++運行期庫  1、概念 在實際的開發過程中,一般使用C/C++運行期函數_beginthreadex代替CreateThread函數。 _beginthreadex首先申請一些用於線程同步的變量,然後調用CreateThread

原创 C++系列 --- 線程內核對象

一、線程內核對象 線程內核對象就是一個包含了線程狀態信息的數據結構。每次對CreateThread函數的成功調用,系統都會在內部爲新的線程分配一個內核對象。系統提供的管理線程的函數就是依靠訪問線程內核對象來管理實現的。 線程內核對象結構

原创 進程內存修改器

一、原理 設計一個名爲MemChange的應用程序,讓它修改Test.exe進程裏面的內容。 每個進程佔用的內存空間是離散的,所以要訪問進程內存種的一個值,就需要遍歷整個64K---2G的地址空間。 難點1.MemChange如何訪問Te

原创 照明的選擇

1、選擇照明的三個步驟 (1) 選擇照明的方式(鏡面反射光、漫反射光、透射光等) 觀察檢測部位的特點(損傷、形狀、有無等)。 觀察表面(平面、曲面、是否有凹凸不平等)加以決定。 (2) 選擇照明的方法*形狀 根據工件條件、設置條件等加以決

原创 鏡頭選擇基礎和視覺系統

1、圖像傳感器的典型應用 視覺系統過程大致可分爲如下四步: (1) 拍攝 按下快門,拍攝圖像。 (2) 傳送 將圖像數據由照相機傳送到控制器。 (3) 處理 前處理: 對於圖像數據進行加工,使其特徵更加明顯。 測算處理: 根據圖像數據對於

原创 CCD(像素)與視覺系統的基礎知識

1、圖像傳感器的四大用途  2、關於攝像元件 CCD 數碼相機的構造與傳統的膠片式相機(模擬式)基本相同。所不同的是數碼相機中使用被稱爲 CCD 的光電轉換元件代替膠片,圖像則作爲數字信息採入。 CCD 即相當於模擬式相機的膠片,那麼它

原创 Win32多線程處理技術【線程的創建】

線程的創建 線程內核對象 線程的終止 線程的優先級 Windows程序的執行單元 多線程 進程---主線程---輔助線程 主線程在運行過程中還可以創建新的線程,即多線程。在同一進程中運行不同的線程的好處是這些線程可以共享進程的資源,如全局

原创 進程控制

進程控制 1、獲取系統進程 2、終止當前進程 3、終止其他進程 4、保護進程 5、進程內存空間說明 6、讀進程內存空間 7、寫進程內存空間 1、獲取系統進程 CreateToolhelp32Snapshot用於獲取系統內指定進程的快照 H

原创 VC++獲取當前進程已加載模塊的文件的完整路徑

獲取當前進程已加載模塊的文件的完整路徑  #define _AFXDLL #include <afx.h> CString GetHomeFolder() { TCHAR strHomeFolderBuf[MAX_PATH+1];