작업 - 20ms 대기 - 작업 - 20ms 대기
이런식으로 돌아가는데
뭐 쓸데없는 이유로 대기하는게 아니라 ui 관련이라서 필요한 부분이거든요
근데 Thread.Sleep(20)이나 WaitHandle.WaitOne(20)은 너무 부정확해서요
시스템 시간 비교로 비교해보니까 25~30ms정도 대기하더라고요
아예 시스템 시간이 20ms지날때까지 빈 무한루프로 대기하니까 어느 정도 정확하긴 한데
이건 대기하는데만 cpu를 엄청나게 잡아먹더라구요
구글에 찾아봐도 안된다는 내용이 많던데 그럼 다른 프로그램에서는 이런 동작을 어떻게 하는건가요?
혹시 방법이 있을까요?
https://stackoverflow.com/questions/91108/how-do-i-get-my-c-sharp-program-to-sleep-for-50-msec
1ms
sleep을 빈 무한루프랑 섞는 방법이 있네요 이거 한번 해보면 괜찮지 않을까요?
이것도 그렇고 thread.sleep도 그렇고 디버깅할때는 정확한데 디버깅 없이 실행하면 실제 대기시간이 불어나요 ㅠ 왜이러는지 모르겠어요
우선 정확히 10ms를 대기해야 하는 이유부터 말해줘
연속된 이미지를 보여주려고 해요
포기해라
닷넷6 쓰셈 이번에 해상도 줜내 올린 거 같던데
.net 6 쓰고있긴해요 지금 하는게 wpf라서.. 아예 갈아엎기엔 너무 많고..
초당 100프레임 뽑아야하는데 WPF? 양심?
지금 테스트하는건 20ms 대기이긴 한데 디버그모드에서는 되든데..
인간 눈이 120fps 보기도 벅찬데 뭐 로봇한테라도 보여주러고?
gif나 영상같은거 재생도 15~20ms 단위로 보여주지않나요? 제가 테스트하는 이미지는 20ms로 되어있는데 재생속도가 확연히 달라요
그렇네 계산 잘못함 120fps 하려면 8ms마다 갱신해야되네
저도 제목을 잘못쓴거같아서 20ms로 바꿨습니다
니 시스템의 해상도가 낮기 때문임. 이 해상도를 높이려면
윈도우기준 timeBeginPeriod같은 함수를 호출해줘야함.
https://www.sysnet.pe.kr/2/0/11082
그리고 해상도를 높이더라도 완벽하게 10ms로 호출할 순 없고, 9.9를 기준으로해서 좀 늦게 호출되었다싶으면 그 다음 대기는 약간 더 짧게 하고, 짧게 대기했다 싶으면 더 길게 대기하고 번갈아서 해야하는것임
아 여기서 해상도는 time resolution
말씀해주신것처럼 측정을 한 다음에 너무 느리면 대기시간을 원래 주어진 것 보다 줄이고 너무 빠르면 조금 늘려서 해결했습니다.. 감사합니다!!
굿
wm timer 쓰면 안대나
그정도로 정확하게 할려면 타이머에 직접 접근해야 할 정도 아닐까
미리 gif로 인코딩해두면 안되나
https://github.com/lastpenguin/MemoryPool/blob/master/Project_C/SourceCode/Engine/UTIL/Timer.h
고해상도 타이머... c#으로 수정해써
정확하게 하고 싶을 수록 cpu는 더 바쁘게 돌고, 점유율 좀 낮추려면 중간에 봐서 sleep(0)써주고