請教如何取得工作完成時間? |
尚未結案
|
enu
中階會員 發表:36 回覆:93 積分:55 註冊:2003-10-22 發送簡訊給我 |
請教各位先進,有一個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 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
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 發送簡訊給我 |
謝謝nlj859,andychang1690先生,如果是取整段程式所run的時間,這個小弟還知道,不過也謝謝andychang1690先生提供的方法,多學了一招(較精準哦!) 但問題是,小弟目前不是要求得整個程式run完所花的時間,而是在該程式中,至少需要click image 15次才會走完,也就會有至少15段的分段時間,如果不是click在image上,就會有更多的時間產出。 如果以兩位先進的方式去修改,應該將程式加在那個地方呢?小弟應該是放錯地方了,因為即時停留幾秒再click,仍然得到0.000...秒,我想應該只是測到button click作用的時間。懇請賜教了!感謝!
|
nlj859
資深會員 發表:139 回覆:375 積分:322 註冊:2004-03-20 發送簡訊給我 |
只要有開始及結束時間,就可以算出時間差.
程式碼要加到哪,要看你自己想算出哪段的時間.
如果不是用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;i |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
引言: 請教各位先進,有一個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 發送簡訊給我 |
|
enu
中階會員 發表:36 回覆:93 積分:55 註冊:2003-10-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |