線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:910
推到 Plurk!
推到 Facebook!

CALLBACK跟Thread配和使用的問題

尚未結案
Fm
初階會員


發表:19
回覆:66
積分:37
註冊:2003-10-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-24 11:25:47 IP:61.70.xxx.xxx 未訂閱
大家好      我想將由callback(MIL提供)所得資料(影像)交由Thread做進一步處理,於是寫了一測試程式     
 
//--------------------
//"Unit1.h"
//---
//-----------------------
__published:        // IDE-managed Components
     TButton *Button1;
     TMemo *Memo1;
     TMemo *Memo2;
     void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
     void __fastcall Button1Click(TObject *Sender);
private:        // User declarations
public:                // User declarations
     __fastcall TForm1(TComponent* Owner);         int nCount1,nCount2;//計數用
     TImgThread *tImgThread;
     HANDLE hImgEvent;//通知Thread有貨到
//-------------------------------
//"Unit1.cpp"
TForm1 *Form1;
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);
//-------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
     : TForm(Owner)
{
     nCount1=0;
     nCount2=0;
     Memo1->Clear();
     Memo2->Clear();
     tImgThread=NULL;
     tImgThread=new TImgThread(false);
     hImgEvent=NULL;
     hImgEvent=CreateEvent(NULL,FALSE,FALSE,NULL);
}
//-------------------------------------------------------------------
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
     Form1->Memo2->Lines->Add(Form1->nCount2  );
     ::SetEvent(Form1->hImgEvent);
     return TRUE;
}
//-------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
     if(tImgThread)tImgThread->Terminate();tImgThread=NULL;
     if(hImgEvent)CloseHandle(hImgEvent);hImgEvent=NULL;
}
//-------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     ::EnumWindows(
          reinterpret_cast(EnumWindowsProc),
          reinterpret_cast(Memo1)
          );    }
//-------------------------------------------------------------------
//
//Thread 的Code
//
__fastcall TImgThread::TImgThread(bool CreateSuspended)
     : TThread(CreateSuspended)
{
     FreeOnTerminate=TRUE;
}
//-------------------------------------------------------------------
void __fastcall TImgThread::Execute()
{
     //---- Place thread code here ----
     while(!Terminated){
          WaitForSingleObject(Form1->hImgEvent,INFINITE);
          Synchronize(Proc);
     }
}
//-------------------------------------------------------------------
void __fastcall TImgThread::Proc(void)
{
     Form1->Memo1->Lines->Add(Form1->nCount1  );
}
//------------------------------------------------------------------
在Memo1(Thread的)與Memo2(CALLBACK的)所顯示出的次數不同 Memo1是2,Memo2約167(視我有多少window handle) 問題: 1)請問有用過MIL的先進們,你們所說的在抓到影像後做進一步分析是這樣子的寫法嗎? 2)怎麼算出來的結果是不一樣的,這該如何解釋?
系統時間:2024-05-20 21:15:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!