은이 코드를 사용하여 360도 정확히 10 초 동안 손의 작은 사진을 회전 응용 프로그램을 만들려고 :루틴이 정시에 실행되는지 어떻게 확인합니까?
#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 hand = (HBITMAP)LoadImage(NULL, ("C:\\Documents and Settings\\Death\\My Documents\\45Hand.bmp") ,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
HBITMAP handmask = (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, handmask);
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, hand);
rotatebmp (hdc_x, q, 850, 375);
BitBlt(hdc_x,550,0,600,527,hdc,0,0, SRCPAINT);
ReleaseDC(HWND_DESKTOP,hdc_x);
Sleep(100);
}
return 0;
}
나는이와 함께 무엇입니까 문제는 실행이 부진 하나 개의 실행 점이다 루프의 합계는 을 제외하고 0.06 초가 걸릴 것입니다. 합계를 계산 했으므로 예상 된 10 초 대신 16 초가되었습니다. 루프가 실행되기 시작한 시간이 얼마나 경과했는지 어떻게 알 수 있습니까? 스레드를 사용하는 것이 유일한 방법이라고 생각 하겠지. 다중 코어 프로세서가 아닌 경우에는 리소스가 쪼개져있어 루프가 느려질 수도 있습니다. Sleep()과 같은 명령은 시간을 어떻게 추적합니까? 확인하는 컴퓨터에 내부 시계가 있습니까? 그렇다면 어떻게 그 시계에 액세스 할 수 있습니까?
POSIX는 이것을 위해'alarm'을 가지고 있습니다 - Windows는 아마 비슷한 것을 가지고 있습니다. 구글 "타이머". –