我試圖做一個程序,旋轉並繪製一個位圖360度超過10秒,但我發現我用這樣做的方法不是即時或甚至關閉的,所以我的函數不會在預期的時間內執行。爲了彌補這一點,我決定確定從我開始使用的函數開始旋轉圖像並繪製它直到完成它的時間已經過去了多長時間,並且增加了執行所花費的額外時間來增加它的旋轉量。如何確定在沒有計時器的情況下已經過了多少時間?
我看了一下定時器,我知道我可以創建一個計時器來增加一個變量來「計數」已經過了多少時間,但爲了使它足夠精確,至少每一次都必須使用它50毫秒(可能更短),當我的重複功能已經每個週期大約需要0.4秒來完成時,我希望它是瞬間或接近即時,我覺得這可能會消耗太多的額外資源,並希望尋找不同的解決方案。
如果您需要任何代碼在這裏,它是:
#include <windows.h>
#include <tgmath.h>
void rotatebmp (HDC hdc_x, float q, float x0, float y0)
{
q = (q * 0.01745333055);
XFORM blah;
blah.eM11 = cos(q);
blah.eM12 = sin(q);
blah.eM21 = -sin(q);
blah.eM22 = cos(q);
blah.eDx = x0 - cos(q)*x0 + sin(q)*y0;
blah.eDy = y0 - cos(q)*y0 - sin(q)*x0;
SetWorldTransform(hdc_x, &blah);
return;
}
int main()
{
float q = 0;
HDC hdc = CreateCompatibleDC(NULL);
HBITMAP cross = (HBITMAP)LoadImage(NULL, ("C:\\Documents and Settings\\Death\\My Documents\\45Hand.bmp") ,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
HBITMAP crossmask = (HBITMAP)LoadImage(NULL, ("C:\\Documents and Settings\\Death\\My Documents\\45Hand2.bmp") ,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
while (1)
{
q = (q + 3.6);
HDC hdc_x = GetDC(HWND_DESKTOP);
SetGraphicsMode(hdc_x, GM_ADVANCED);
SelectObject(hdc, crossmask);
rotatebmp (hdc_x, q, 850, 375);
BitBlt(hdc_x,550,0,600,527,hdc,0,0, SRCAND);
ReleaseDC(HWND_DESKTOP,hdc_x);
hdc_x = GetDC(HWND_DESKTOP);
SetGraphicsMode(hdc_x, GM_ADVANCED);
SelectObject(hdc, cross);
rotatebmp (hdc_x, q, 850, 375);
BitBlt(hdc_x,550,0,600,527,hdc,0,0, SRCPAINT);
ReleaseDC(HWND_DESKTOP,hdc_x);
Sleep(10);
}
return 0;
}
嘗試計時器,看看它是否有效,然後放棄這個想法。 –
'50 ms','0.4s' - GetTickCount()遠遠超過這個速度!閱讀真正的'花時間'只會更快,速度更快。 –