2013-01-07 3 views
1

TTimer에서 전역 변수 나 VCL에 액세스 할 때 Synchronize을 사용해야합니까? 나는 이미 동기화를 사용하는 TThread에서 동일한 변수와 객체를 사용합니다.TTimer 이벤트에서 동기화를 호출해야합니까?

+2

질문을 이해하기가 어렵습니다. 나는 그것을 명확하게하기 위해 수정하는 것이 좋습니다. –

+0

이미 대답했지만, 좀 더 명확히하기 위해'TTimer'는 어떤 식 으로든'TThread'가 아닙니다. Timer는 호출하는 쓰레드 (이 경우에는 메인 쓰레드) 내에서 반복적으로 무언가를 수행하는 싸구려 방법이다. 반면 'Synchronize'는 TThread에 매우 특정한 것이다. –

답변

11

TTimer의 OnTimer 이벤트는 주 스레드에서 실행됩니다. 해당 이벤트에서 VCL에 대한 액세스를 동기화 할 필요가 없습니다.

+0

고맙습니다. – Artik

+7

글쎄, 'TTimer.OnTimer' 이벤트는'TTimer'가 내부적으로'HWND'를 생성하고 스레드 선호도를 가지므로'TTimer' 인스턴스를 생성하는 스레드의 컨텍스트에서 시작됩니다. 만약 그것이 메인 쓰레드라면,'OnTimer' 이벤트는 메인 쓰레드에서 실행될 것입니다. 그러나'TTimer'가 주 쓰레드 외부에서 생성된다면 동기화해야합니다. –