안녕하세요. 그래서 화면에 그리는 화면을 사용하는 1 개의 스레드가 있고 화면의 개체 위치를 업데이트하는 다른 스레드가 있습니다. 이러한 작업을 같은 속도로 실행하려면 어떻게해야합니까?UI 동기화 스레드 및 주말 스레드
답변
이 트레이드 오프 :
- 모든 모션이 매끄럽게 나타나는 것처럼 화면을 충분히 자주 업데이트하려고합니다.이
- 작업 말 스레드가 가치 변경이있는 경우를 나타내는 플래그를 설정 :
- 당신은 주력 스레드
쉬운 솔루션은이 같은 것입니다에 가능한 한 많은 CPU를주고 싶어 다시 그리기.
UI 스레드 당신은 작업자 스레드의 컨텍스트에서 핸들러를 작성해야합니다 후, 운영체제를 Handler
를 사용 .post 호출 조금이
do {
renderScreen();
while (!screenNeedsRedrawing) {
Thread.sleep(10);
}
}
비판적이어서는 안되지만 짧은 시간 동안자는 것이 좋습니다. OS에 대해 너무 많은 컨텍스트 스위치를 강제 실행하여 앱의 성능을 끌어 내려야합니다. while 루프를 waitObject.wait()로 대체 할 동기화 된 객체를 사용하는 것이 더 좋을 것이며 작업자 스레드가 완료된 후에는 렌더링 스레드를 계속할 수있는 waitObject.notifyAll()을 호출합니다. 이렇게하면 작업이 모두 완료 될 때까지 OS가 UI 스레드를 포 그라운드로 가져 오는 것을 방해하지 않습니다. 잠을 자면 반복적으로 시도하고 다시 넣어야합니다. – user1132959
나는 당신의 코멘트에 대해 생각 해왔다. 비록 내가 정말로 뭔가 할 일이있을 때 잠자는 깨우기를 원한다는 것에 동의 하겠지만 스레드가 게임에서 화면 렌더링을하고있을 때 정말로 최소 FPS 속도로 무언가를하십시오. 그래서, 아마도 10은 너무 짧지 만 100은 너무 길어질 것입니다. 화면은 10 초마다 다시 렌더링되기 때문에 사용자 경험이 좋지 않습니다. 아마도 25 (40Hz)가 좋은 절충안이 될 것입니까? –
당신은 좋은 지적을하고 25는 좋은 타협이 될 것 같습니다. 좋은 숫자를 찾으려면 약간의 실험이 필요할 것입니다. 개인적으로 대기 핸들을 사용하여 동기화 할 때와 같은데, 준비가되었을 때만 깨울 것입니다. – user1132959
매우 간단합니다, 당신이 그것을 업데이트 할 때마다 바로 핸들러 또는 방법 runOnUiThread
을 사용하여 메인 스레드에 대한 콜백을 작성하고 작업자 스레드에서 UI를 업데이트
같은 흐름을 가지고()를 호출하려는 실행 파일로 대체하십시오. 그릴 때마다이 작업을 수행하면 업데이트 스레드가 작업자 스레드에 게시됩니다. 이제는 업데이트가 완료 될 때까지 그리기 스레드를 잠그고 스레드 안전 변수와 같은 것이 있으면 그리기 스레드가 업데이트를 마칠 때까지 기다려야 할 수 있습니다.
- 1. 스레드 동기화 - UI 없음
- 2. 다중 스레드 및 스레드 동기화
- 3. 동기화, 잠금 및 대기 메인 UI 스레드
- 4. 멀티 스레드, 스레드 동기화
- 5. 스레드 동기화 및 중단
- 6. 자바 동기화 및 스레드
- 7. 스레드 스태틱 및 동기화
- 8. 작업자 스레드 및 컨트롤러 스레드 동기화
- 9. 다중 스레드 및 동기화 스레드 가시성
- 10. 스레드 동기화
- 11. COM Interop 및 스레드 동기화
- 12. C에서 스레드 동기화
- 13. 스레드 동기화
- 14. 스레드 동기화
- 15. 스레드 동기화
- 16. 스레드 동기화.
- 17. 렌더링/동기화 스레드 동기화
- 18. UI 스레드 및 작업 스레드 자습서 찾기
- 19. UI 스레드 및 Surfaceview
- 20. 스레드, UI 스레드, 작업자 스레드, 비동기 작업
- 21. 스레딩 및 스레드 선점 동기화
- 22. 동기화 개체 및 스레드 풀
- 23. GTK3 + 및 Python의 스레드 동기화
- 24. 다중 스레드 및 Java 동기화
- 25. 스레드 동시성 - 동기화 및 잠금.
- 26. 배경 스레드 대 UI 스레드
- 27. WPF 스레드() 블록 UI 스레드
- 28. UI 스레드
- 29. UI 스레드
- 30. 간단한 스레드 동기화
* 같은 속도로 * 무엇을 의미합니까? – m0skit0
개체 위치가 그려지는 속도로 업데이트하려고합니다. – MikeT
그리기 스레드의 위치를 업데이트하십시오. – m0skit0