全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1722
推到 Plurk!
推到 Facebook!

TThread與window aip的使用..

尚未結案
雲中鵝
一般會員


發表:14
回覆:24
積分:7
註冊:2004-12-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-12-01 23:15:30 IP:140.125.xxx.xxx 未訂閱
請問大大... 1.如何在使用Tthread元件下還可以使用windows api..... 像是waitfor()及waitforObject(HANDLE hHandle,DWORD dwMilliseconds);要如何使用它們使得有相同的結果..及要放在那裡?..因為以waitfor()及waitforobject()都可以在設為在thread完成時變成激發狀態....waitfor()是等侍本身的 thread terminates嗎?而在WaitForObject(..)則是以hHandle是否有成激發狀態嗎? 2.請問執行緒核心物件...是什麼? 若二個不同檔案的thread1.h' thread1.cpp 及thread2.h 'thread2.cpp中...的動作相同時(但是使用不同Form1的VCL元件時).分別建立為何其handle都是相同的值.. 謝謝回答 Try it!
------
Try it!
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-12-02 00:56:36 IP:219.84.xxx.xxx 未訂閱
您好: 不建議在使用TThread時也自行呼叫Windows中處理Thread的API。TThread在處理thread時,已經包裝了Windows的API,並且有一些防止dead lock的設計。如果和Windows API混用,就不能保證其安全性了。建議全部經用TThread作Thread的處理比較安全。 如果不得已有些功能一定要用WinAPI,最好就全部自行打造。
雲中鵝
一般會員


發表:14
回覆:24
積分:7
註冊:2004-12-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-12-07 01:23:19 IP:140.125.xxx.xxx 未訂閱
嗯.....因為手上正好有一本...WIN32多緒程式設計的書藉..故...小弟想以API實現.. 1.為何程式...GetExitCodeThread..在這個for(;;)判斷中..一直沒有離開呢..而使用sleep()時..則有回應...呢?是要用Synchronize(..)嗎?是因使用到vcl元件嗎?    謝謝回答  
 
DWORD   WINAPI  ThreadFunc(void* );    void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;
HANDLE  hThrd[5];
DWORD   threadid,exitcode;            for(i=0;i<5;i  )
        {
                hThrd[i]=CreateThread(NULL,0,ThreadFunc,(void*)i,0
                ,&threadid);
        if(threadid)
               {
                this->Memo1->Lines->Add("thread aunched" 
                IntToStr(i));                    }
         for(;;)
                {
                GetExitCodeThread(hThrd[i],&exitcode);
                if(exitcode!=STILL_ACTIVE)
                        break;
                else
                    {
                    Form1->Memo1->Lines->Add("thread still running!");
                    }
                    Sleep(1000);
                }                   CloseHandle(hThrd[i]);
        }
        Sleep(200);
       //exit(0);//將使得thread未完全結束...    }
//---------------------------------------------------------------------------
DWORD   WINAPI  ThreadFunc(void* n)
        {
        int i;
        int *b=(int*)n;
        Form1->Memo1->Lines->Add("the para is" IntToStr(n));            for(i=0;i<5;i  )
         Form1->Memo1->Lines->Add(IntToStr((int)n) IntToStr((int)n)
          IntToStr((int)n));            return 0;
/*        Sleep((DWORD)n*100*2);
        return (DWORD)n*10;*/
        }
Try it!
------
Try it!
系統時間:2024-04-23 21:24:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!