2017-12-05 20 views
-3

두 개의 점 (10ms의 중단 시간)이 동시에 깜박이지만 하나는 지연이 200ms이고 다른 하나는 300ms의 지연이있는 프로그램을 만들고 싶습니다. 처음부터이 두 도트를 동시에 재생할 수 있습니까?한 번에 두 개의 지연을 실행하십시오. C++

for(int i=1;i<100;i++) 
{ 
    if (i%2==0) 
    circle(10,10,2); 
    if (i%3==0) 
    circle(20,10,2); 
    delay(10); 
    cleardevice(); 
    delay(100); 
} 
+6

TurboC에

for(int i=1;i<100;i++) 

을 변경하여 그것을 달성 할 수 있는가? 그 고대 컴파일러를 사용 하시겠습니까? –

+0

예, 초보자이며 그 사용만을 원합니다 –

+0

지연 시간을 사용하지 마십시오. C++을 실행하는 데는 여러 가지 방법이 있습니다. '크로노 (chrono) '및 관련 항목을 살펴보십시오. 잠깐 ... 그게 C++ 11이야 ... 터보 C++이 그걸 할 수 있을지는 모르겠다. ... – Matt

답변

0

내가 대신이 같은 일을 할 것입니다 : 내가 여기에 직접 쓴

int t0=0,t1=0,t=0,s0=0,s1=0,render=1; 
for (;;) 
{ 
if (some stop condition like keyboard hit ...) break; 
// update time, state 
if (t>=t0) { render=1; s0=!s0; if (s0) t0+=10; else t0+=200; } 
if (t>=t1) { render=1; s1=!s1; if (s1) t1+=10; else t1+=300; } 
// render 
if (render) 
    { 
    render=0; 
    cleardevice(); 
    if (s0) circle(10,10,2); 
    if (s1) circle(20,10,2); 
    } 
// update main time 
delay(10); // Sleep(10) would be better but I am not sure it is present in TC++ 
t+=10; 
if (t>10000) // make sure overflow is not an issue 
    { 
    t -=10000; 
    t0-=10000; 
    t1-=10000; 
    } 
} 

코드를주의가 안된이다 (그래서 구문이있을 수 있습니다 다음에서 해당하는 더 좋은 방법이 있나요 오류 또는 오타).

기본 아이디어는 충분히 작은 입도 (10ms)의 글로벌 시간이 하나만 있습니다. 각 개체에 대해 이벤트 (t0,t1) 상태 (s0,s1) 및 마침표 (10/200 , 10/300)가 있습니다.

주 시간이 이벤트 시간에 도달하면 상태를 켜고 끄고 이벤트 시간을 다음 상태 스왑 시간으로 바꿉니다.

이 방법을 사용하면 몇 가지 개체를 가질 수 있으므로 기본 시간 간격이 충분히 작아야합니다.

렌더 플래그는 장면이 변경시에만 렌더링되도록합니다.

RDTSC 대신 t+=10를 사용할 수있는 타이밍을 개선하고 실제로 CPU 주파수 정확도와 함께 전달 된 시간을 측정합니다.

0

첫 번째 라운드에서 두 개의 원을 동시에 표시하려면 i%2==0i%3==0을 동시에 만족해야합니다. 당신은 단순히 ++

for(int i=0;i<100;i++) 
//  ↑ zero here