原创 多線程編程裏如何運用CreateMutex,WaitForSingleObject,ReleaseMutex來實現線程同步

這幾天忙着寫一個實現basler相機的採集功能的軟件,其實無非也就是看文檔,調用他提供的接口。 但在這其中出現了一點小問題,我寫了一個子進程,但每次使用全局標識符關閉子進程,主進程都會出現錯誤,提示捕獲流正在進行,相機已掛載,最後

原创 模板類和友元函數

模板類的友元分3類:非模板友元 約束(bound)模板友元,即友元的類型取決於類被實例化時的類型。 非約束(undound)模板友元,即友元的所有具體化都是類的每一個具體化的友元。 1.模板類的非模板友元函數 template<

原创 opencv庫cvProjectPoints2函數遇到的問題

將攝像機的內外參標定好之後,今天用opencv庫的cvProjectPoints2的函數計算反投影,得到標定誤差,發現誤差正常,但是自己用matlab通過矩陣運算得到的誤差大的驚人,最後經過幾番對cvProjectPoints2和成像模型

原创 Linux中/etc/init.d

 init.d目錄包含許多系統各種服務的啓動和停止腳本。它控制着所有從acpid到x11-common的各種事務。(acpid 是linux操作系統新型電源管理標準 ;X11也叫做X Window系統,X Window系統 (X11或X

原创 自制動態語言Medusa的解釋器

今天整理了一下學習編譯原理時,實現語言Medusa時寫的筆記,搞出了一篇類似說明文檔的東西,介紹下Medusa 語法部分 Medusa是一門動態腳本語言,語法和代碼格式借鑑Python,運行代碼在頂層書寫。 Medusa不識別':'

原创 leveldb學習:sstable(2)

block寫入:block_builder block.h和.cc裏定義了block的entry存儲格式和restart,提供了entry的查找接口以及迭代器。那麼如何往寫block裏寫entry呢?leveldb遵循面向對象的設計理念在

原创 leveldb學習:Env

考慮到移植以及靈活性,leveldb將系統相關的處理(文件/進程/時間)抽象成Evn,用戶可以自己實現相應的接口,作爲option傳入,默認使用自帶的實現。 解壓目錄/util/中放有env的聲明和實現代碼。env.h中聲明瞭: 虛

原创 leveldb學習:Cache

leveldb自己實現了cache緩衝區替代算法,參見代碼cache.h和cache.c文件。leveldb中table_cache等都是以class cache作爲底層實現。 cache.h中,我們看到cache類是一個抽象類,聲明瞭

原创 leetcode:Longest Increasing Subsequence

Given an unsorted array of integers, find the length of longest increasing subsequence. For example, Given [10, 9, 2,

原创 leveldb學習:內存池Arena

和SGI版的STL一樣,leveldb內存分配也採用了memory pool的整理方式,減少內存不斷分配釋放過程中造成的空間零碎化和浪費。leveldb的內存池實現可參見arena.h和arena.cc,有關內存池的測試代碼有arena_

原创 leveldb學習:Version

到此爲止,基本上leveldb的主要功能組件都已經分析完了,下面如何把它們組合在一起形成一個高效穩定的數據庫,這就是DBimpl類和compact進程的工作。 campact進程 爲了均衡讀寫的效率,sstable文件分層次(leve

原创 #pragma once 與#ifndef,#define,#endif的差別 、重複定義等相關問題

今天寫程序時,對編譯預處理和#pragma once,#ifndef,#define,#endif產生了一些困惑,以前都是知道個大概,今天一下子查了很多資料,下面就是一些我現在對這個問題的認識,弄清楚這些,再加上我轉的一篇.h和.cpp區

原创 leveldb學習:測試代碼續

通過上篇博客的學習,我知道了leveldb的測試程序主函數是如何利用宏TEST和容器tests調用測試程序,今天來看看測試程序,也就是寫進_Test_name類的_Run( )究竟實現了什麼。 TEST(DBTest, ReadWrite

原创 利用C++文件流進行數據塊的讀寫

科研項目上遇到一個文件流的讀寫問題,要把一個圖片像素大小(1392*1038)的矩陣(double型)數據寫入磁盤,一開始是用ofstream將數據逐個寫入txt文件中,這樣做的結果就是寫出的文件太大,不利於存儲和轉移,而且讀寫速度奇慢,

原创 leveldb學習:Memtable和Varint

Memtable: Memtable是leveldb數據在內存中的存儲形式,寫操作的數據都會先寫到memtable中,memtable的size有限制最大值(write_buffer_size)。memtable的底層數據結構是skipl