2014年1月28日 星期二

C++ multi-thread




sample code

can run in visual c++ 2012



// threadtest.cpp : 定義主控台應用程式的進入點。
//

#include "stdafx.h"
#include  <iostream>
#include  <thread> 

using namespace std;


int gg=0;

void function_1(int a,int b, int c ){
    std::cout<<"test string"<<endl;
    std::cout<<a<<" "<<b<<" "<<c<<endl;
    std::cout<<"gg ="<<gg<<endl;
}


int _tmain(int argc, _TCHAR* argv[])
{

    gg=5;
    thread t1(function_1,1,2,3);
    t1.join();

    
    return 0;
}

2014年1月24日 星期五

DirectShow coding 環境

(a)  使用visual studio c++ 2012

(b)  download  SDK ,
         http://www.microsoft.com/en-us/download/confirmation.aspx?id=3138
        (windows 7)

(c)
    in project must include Dshow.h file

(d) include library

    Strmiids.lib & Quartz.lib

    project --> 屬性
 
    set library path
   
 


Set library file 

2014年1月20日 星期一

visual c++ 6.0 檢查 memory leak


Step 1 : include function   #include

Step2:   enable warning to standard output , default  to screen
             此範例 把output 設為file, 但實際執行還是跑到 screen

        _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
        _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );

step 3:    宣告變數
            _CrtMemState memstate[5];
    _CrtMemState memdiff;

step 4
          a. 在要 夾集的兩端  用  _CrtMemCheckpoint() 紀錄memory 狀態
          b. 然後用  _CrtMemDumpStatistics() 比較
          c  _CrtMemDumpStatistics() ,  送出資料


      _CrtMemCheckpoint(memstate);

Algori_1(algo1_input);

_CrtMemCheckpoint(memstate+1);

_CrtMemDifference(&memdiff,memstate,memstate+1);
_CrtMemDumpStatistics(&memdiff);


 

2013年11月20日 星期三

vc++ 6.0 build DLL


Build DLL Project 

step 1: create one DLL project 

選擇   regular dll with MFC statically link  , 會把需要的MFC全部包進 dll ,以免使用dll的環境沒有mfc 或者版本不一致








step 2 : Export function

在需要export 的function  宣告前加  keyword    __declspec(dllexport)
example :   __declspec(dllexport )  int TestSum(int a, int b);

可以用macro 簡化

#define DLLEXPORT __declspec(dllexport)
DLLEXPORT int Algori_1(stAlgo1Input *Input);
DLLEXPORT int sumtest(int a, int b);


使用這種方式  .def 檔可以不用處理

step3 : build DLL &LIB file 




2013年10月30日 星期三

在 blogger 加上程式碼

方法一  Step 1:           範本 修改   選 自訂      
        進階   -;新增 CSS 
             
   

讀寫 execel

網路找到一個class 可以讀寫  execel file

可以開worksheet, 寫入/讀取 int, floating


簡單的example 如下


int main(int argc, char* argv[])
{

    const char title[][20]={{"mean"},{"median"},{"deviation"},{"row dev"},{"column dev"}};

    BasicExcel  exl;
    BasicExcelWorksheet* sheet1;
    char* pchar;
    char* sname1="testsheet1";
    char* sname2="testsheet2";
    BasicExcelCell* cell;
    int i;

    exl.New(2);
    pchar=exl.GetAnsiSheetName(0);
    exl.RenameWorksheet((size_t)0,(const char*)sname1);
    exl.RenameWorksheet((size_t)1,(const char*)sname2);

    sheet1=exl.GetWorksheet((size_t)1);

    for( i=0;i<5;i++){
        cell=sheet1->Cell(0,i);
        cell->Set(title[i]);
    }

    for(i=0;i<5;i++){
        cell=sheet1->Cell(1,i);
        cell->Set(i);
    }


    exl.SaveAs("AndrewEx.xls");
    return 0;    
    

}

讀寫 tag , ini

PC 的程式 有時需要 讀寫 ini    設定檔

寫了一段處理文字 並讀取值的code

用 ifstream 開檔案
然後用getline讀取每一行

用find 去比對Tag  , 試著把這一行放到 if  內會有問題
rt=st1.find(Tag_SaveTemp);


以下的code 會變成無論有沒有值都會進 if
if(st1.find(Tag_SaveTemp)>=0){
savtemp=GetTagValue(st1,Tag_SaveTemp);
continue;
}


ini   擺放的位置
不指定路徑的話 ,  Debug 模式下  ini 要放在porject 的主目錄,
release 版本 跟執行檔放同一個目錄