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

請教如何取得工作完成時間?

尚未結案
enu
中階會員


發表:36
回覆:93
積分:55
註冊:2003-10-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-17 12:59:45 IP:163.27.xxx.xxx 未訂閱
請教各位先進,有一個image,當滑鼠click它的時候,它才會移動到下一步(如下例所示)。假如小弟要計算從image出現,直到它被click的這段時間(也就是一步一步的時間),應該如何取得呢?還請各位先進提供建議,懇請賜教!感謝!
 
int path [15][2] = {{11, 104}, {74, 94}, {135, 70}, {181, 83}, {212, 103}, {249, 131}, {287, 160}, {311, 189}, {317, 240}, {316, 273}, {366, 301}, {420, 329}, {467, 353}, {511, 362}, {520, 362}};
int gi=0;
void __fastcall TForm1::Image1Click(TObject *Sender)
{
   Image1->Left=path[gi][0];
   Image1->Top =path[gi][1];
   gi  ;
   if(gi>=15) gi=0;
} 
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-17 13:57:17 IP:219.80.xxx.xxx 未訂閱
Hello enu, 請參考底下相關連結文章: http://delphi.ktop.com.tw/topic.php?topic_id=49520
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-18 01:08:29 IP:221.169.xxx.xxx 未訂閱
enu:nlj859所連結的資訊包子版大的答案應該符合你的要求,
我這裡延伸說明一下以範例說明:    //定義一下總體變數:
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus,dfFreq,dfTim;    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //獲得計時器計時頻率
  QueryPerformanceFrequency(&litmp);
  dfFreq=(double)litmp.QuadPart;
  //獲得初始值
  QueryPerformanceCounter(&litmp);
  QPart1=litmp.QuadPart;
}    void __fastcall TForm1::Button2Click(TObject *Sender)
{
  QueryPerformanceFrequency(&litmp);
  //獲得終止值
  QueryPerformanceCounter(&litmp);
  QPart2=litmp.QuadPart;
  //計算兩者之差
  dfMinus=(double)(QPart2-QPart1);
  //獲得對應的時間值
  dfTim=dfMinus/dfFreq;
  Label1->Caption=dfTim;
}
QueryPerformanceCounter是API適合計算短時間的精確值(小於一秒)
如果是計算長時間的話請不要使用。
請參考
Andy Chang
------
Andy Chang
enu
中階會員


發表:36
回覆:93
積分:55
註冊:2003-10-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-18 16:39:53 IP:220.142.xxx.xxx 未訂閱
謝謝nlj859,andychang1690先生,如果是取整段程式所run的時間,這個小弟還知道,不過也謝謝andychang1690先生提供的方法,多學了一招(較精準哦!) 但問題是,小弟目前不是要求得整個程式run完所花的時間,而是在該程式中,至少需要click image 15次才會走完,也就會有至少15段的分段時間,如果不是click在image上,就會有更多的時間產出。 如果以兩位先進的方式去修改,應該將程式加在那個地方呢?小弟應該是放錯地方了,因為即時停留幾秒再click,仍然得到0.000...秒,我想應該只是測到button click作用的時間。懇請賜教了!感謝!
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-18 17:50:39 IP:163.28.xxx.xxx 未訂閱
只要有開始及結束時間,就可以算出時間差. 程式碼要加到哪,要看你自己想算出哪段的時間. 如果不是用Button去觸發,當然也可以算出時間差,就像你知道如何算出程式開始到結束時間. 如果不知道要加到哪,請把部份程式碼附上.    底下為一個簡單範例: 當Button1按下後,它會去算出15次裡面每次的執行時間,每次所要做的次數都會不同,你看一下Memo2所顯示的每次時間就可知道.    
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  for (int j=0;j<15;j  )
  {
   Memo1->Clear();
  //獲得計時器計時頻率
  QueryPerformanceFrequency(&litmp);
  dfFreq=(double)litmp.QuadPart;
  //獲得初始值
  QueryPerformanceCounter(&litmp);
  QPart1=litmp.QuadPart;      int n=random(100) 1;
  for (int i=0;iLines->Add(i);
   }      QueryPerformanceFrequency(&litmp);
  //獲得終止值
  QueryPerformanceCounter(&litmp);
  QPart2=litmp.QuadPart;
  //計算兩者之差
  dfMinus=(double)(QPart2-QPart1);
  //獲得對應的時間值
  dfTim=dfMinus/dfFreq;      Memo2->Lines->Add(dfTim);
  }
}
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-18 21:53:14 IP:221.169.xxx.xxx 未訂閱
引言: 請教各位先進,有一個image,當滑鼠click它的時候,它才會移動到下一步(如下例所示)。假如小弟要計算從image出現,直到它被click的這段時間(也就是一步一步的時間),應該如何取得呢?還請各位先進提供建議,懇請賜教!感謝!
 
int path [15][2] = {{11, 104}, {74, 94}, {135, 70}, {181, 83}, {212, 103}, {249, 131}, {287, 160}, {311, 189}, {317, 240}, {316, 273}, {366, 301}, {420, 329}, {467, 353}, {511, 362}, {520, 362}};
int gi=0;
void __fastcall TForm1::Image1Click(TObject *Sender)
{
   Image1->Left=path[gi][0];
   Image1->Top =path[gi][1];
   gi  ;
   if(gi>=15) gi=0;
} 
enu:改你的程式為範例:
//定義一下總體變數:
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus,dfFreq,dfTim=0.0;
int path [15][2] = {{11, 104}, {74, 94}, {135, 70}, {181, 83}, {212, 103}, {249, 131}, {287, 160}, {311, 189}, {317, 240}, {316, 273}, {366, 301}, {420, 329}, {467, 353}, {511, 362}, {520, 362}};
int gi=0;
void __fastcall TForm1::Image1Click(TObject *Sender)
{
   //獲得計時器計時頻率
   QueryPerformanceFrequency(&litmp);
   dfFreq=(double)litmp.QuadPart;
   //獲得初始值
   QueryPerformanceCounter(&litmp);
   QPart1=litmp.QuadPart;       Image1->Left=path[gi][0];
   Image1->Top =path[gi][1];
   gi  ;
   if(gi>=15) gi=0;
    
   QueryPerformanceFrequency(&litmp);
   //獲得終止值
   QueryPerformanceCounter(&litmp);
   QPart2=litmp.QuadPart;
   //計算兩者之差
   dfMinus=(double)(QPart2-QPart1);
   //獲得對應的時間值
   dfTim =dfMinus/dfFreq;
} 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   Label1->Caption="共執行時間為:" FormatFloat("#.000",dfTim);
   dfTim=0.0;
}
你每執行一次ImageClick,dfTim會累加一次前次時間。
請參考!    
Andy Chang
------
Andy Chang
enu
中階會員


發表:36
回覆:93
積分:55
註冊:2003-10-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-19 03:16:39 IP:220.142.xxx.xxx 未訂閱
再次謝謝nlj859,andychang1690先生,小弟正是使用andychang1690先生的方式去測試,可是如同之前所述,andychang1690先生這樣的方式應該是測得每一次click之後,將變數傳遞完成所花的時間,所以每一次都會少於一秒。 小弟現在的問題是,如果滑鼠每一步都停留幾秒再去click呢?應如何去計算這每一步的時間呢?(就是每一步image出現後到滑鼠click之間的時間) 不好意思,問題可能描述不好,還請各位先進指點迷津,感謝!
enu
中階會員


發表:36
回覆:93
積分:55
註冊:2003-10-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-19 10:58:25 IP:220.142.xxx.xxx 未訂閱
謝謝nlj859及andychang1690先生,後來用andychang1690先生的方式試出來了。感謝!
系統時間:2024-05-06 19:51:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!