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

About Thread 的疑問 Under Linux ?

尚未結案
scott777
一般會員


發表:10
回覆:15
積分:5
註冊:2002-08-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-13 11:45:53 IP:61.230.xxx.xxx 未訂閱
在Main中
        TVQ_THREAD_CONTROL thread_ctf;
        
//New Thread        
        TVQ_Thread *listen_thread = new TVQ_Thread();
        //-----------------------------------------------
        TVQ_Thread *job_thread1 = new TVQ_Thread();        
        TVQ_Thread *job_thread2 = new TVQ_Thread();
        TVQ_Thread *job_thread3 = new TVQ_Thread();
        TVQ_Thread *job_thread4 = new TVQ_Thread();
        TVQ_Thread *job_thread5 = new TVQ_Thread();
        //-----------------------------------------------
        //TVQ_Thread *send_thread = new TVQ_Thread();                
// Create Thread        
        CreateListenThread(listen_thread,&thread_ctf);
        //-----------------------------------------------
        thread_ctf.us_ThreadID = 1;
        CreateJobThread(job_thread1,&thread_ctf);
        usleep(200);
        thread_ctf.us_ThreadID = 2;
        CreateJobThread(job_thread2,&thread_ctf);
        usleep(200);
        thread_ctf.us_ThreadID = 3;
        CreateJobThread(job_thread3,&thread_ctf);
        usleep(200);
        thread_ctf.us_ThreadID = 4;
        CreateJobThread(job_thread4,&thread_ctf);
        usleep(200);
        thread_ctf.us_ThreadID = 5;
        CreateJobThread(job_thread5,&thread_ctf);    //-----------------------------------------------------------------------------    bool CreateJobThread(TVQ_Thread *jb_thread,TVQ_THREAD_CONTROL *lock)
{
        TVQ_THREAD_CONTROL *ctf = static_cast(lock);
        cout << "Create Job Thread-" << ctf->us_ThreadID << endl;        
        jb_thread->Create(&Job_Thread,lock);
        return true;        
}    //-----------------------------------------------------------------------------
void *Job_Thread(void *param)
{        
        TVQ_THREAD_CONTROL *ctf = static_cast(param);
        TVQ_DOJOB *tjob = new TVQ_DOJOB(ctf->us_ThreadID);
        cout << "Run Job thread-" << ctf->us_ThreadID << endl;
        while(1)
        {
                usleep(100);
                tjob->Run(param);
        }
}
//-----------------------------------------------------------------------------
則會列出 Create Job Thread-1 Run Job thread-1 Create Job Thread-2 Run Job thread-2 Create Job Thread-3 Run Job thread-3 Create Job Thread-4 Run Job thread-4 Create Job Thread-5 Run Job thread-5 但是如果把usleep(200);拿掉
         thread_ctf.us_ThreadID = 1;
        CreateJobThread(job_thread1,&thread_ctf);
        thread_ctf.us_ThreadID = 2;
        CreateJobThread(job_thread2,&thread_ctf);
        thread_ctf.us_ThreadID = 3;
        CreateJobThread(job_thread3,&thread_ctf);
        thread_ctf.us_ThreadID = 4;
        CreateJobThread(job_thread4,&thread_ctf);
        thread_ctf.us_ThreadID = 5;
        CreateJobThread(job_thread5,&thread_ctf);
會變成 Create Job Thread-1 Create Job Thread-2 Create Job Thread-3 Create Job Thread-4 Create Job Thread-5 Run Job thread-5 Run Job thread-5 Run Job thread-5 Run Job thread-5 Run Job thread-5 似乎Thread一建立起來並不是馬上就執行的,這問題的癥結點在哪呢? 除了用usleep還有其他更好做法嗎? 因為用usleep程式啟動會慢一點點......
系統時間:2024-05-18 16:14:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!