안녕하세요?
저는 타이머를 이용한 일종의 플레이어를 제작하다가 도저히 타이머의 부정확성으로 인하여 이것으로는 제작할 수 없다고 생각하게 되었습니다. ( 약 30 ms 의 해상도를 지녀야 하는데.. 제 멋대로입니다. )
그래서 혹시나 하고 for 루프로 플레이 데이타를 돌렸더니 거의 완벽하게 돌더군요. 생각해보면 이때의 priority 가 100 % 이기 때문에 아무 시간적 손실없이 플레이되는 게 아닌가 합니다.
이렇게 플레이가 된다는 것은 좋은데, 문제는 이것을 중간에 중단시킬 수가 없다는것입니다. 컨트롤이 완전히 그 프로시져에 묶여있어서인지 아무튼 다른 콘트롤은 완전히 사용할 수 없는 상태가 됩니다.
물론 다른 윈도우로 포커스를 넘기는 것은 가능하더군요.
아무튼 이 문제를 어떻게 해결할 수 있을까요? 아무리 타이머의 priority 를 올려도 이문제는 해결 할 수 없을 거 같고, 위와 같이 for 루프로 돌리면 컨트롤을 제어할 수가 없고... 난관입니다.
고수 여러분 한 번 살펴보시고 조언해주세요..
그럼 기다리겠습니다..
루프 중간에 Application.ProcessMessage메소드를 쓰면 루프를 도는 중에도 이벤트가
먹습니다. 루프를 제어하는 변수를 하나두고 다른 이벤트에서 이 변수를 이용하여 루프
를 제어하시면 되겠네요...
var
LoopExit: Boolean; // 다른 이벤트에서 제어할 수 있는 범위에 선언을 해야겠죠...
procedure TForm1.SomeThing;
begin
...
for ... to ... do
begin
...
Application.ProcessMessage;
...
if LoopExit then
Exit; // or Break;
...
end;
...
end;
^^ 항상 즐코하세요.
백인기 wrote:
> 안녕하세요?
>
> 저는 타이머를 이용한 일종의 플레이어를 제작하다가 도저히 타이머의 부정확성으로 인하여 이것으로는 제작할 수 없다고 생각하게 되었습니다. ( 약 30 ms 의 해상도를 지녀야 하는데.. 제 멋대로입니다. )
>
> 그래서 혹시나 하고 for 루프로 플레이 데이타를 돌렸더니 거의 완벽하게 돌더군요. 생각해보면 이때의 priority 가 100 % 이기 때문에 아무 시간적 손실없이 플레이되는 게 아닌가 합니다.
>
> 이렇게 플레이가 된다는 것은 좋은데, 문제는 이것을 중간에 중단시킬 수가 없다는것입니다. 컨트롤이 완전히 그 프로시져에 묶여있어서인지 아무튼 다른 콘트롤은 완전히 사용할 수 없는 상태가 됩니다.
>
> 물론 다른 윈도우로 포커스를 넘기는 것은 가능하더군요.
>
> 아무튼 이 문제를 어떻게 해결할 수 있을까요? 아무리 타이머의 priority 를 올려도 이문제는 해결 할 수 없을 거 같고, 위와 같이 for 루프로 돌리면 컨트롤을 제어할 수가 없고... 난관입니다.
>
> 고수 여러분 한 번 살펴보시고 조언해주세요..
>
> 그럼 기다리겠습니다..