2 개의 프로젝트가 있습니다. 하나는 MFC 스타일이없는 C++ Builder에 의해 만들어졌습니다. 그리고 다른 하나는 VC++ MFC 11입니다.오디오가 꺼져있을 때 스레드가 느립니다.
스레드를 생성하고 사이클을 생성 할 때 -이 사이클은 progressbar 위치에 하나를 추가한다고 가정 해 봅시다 - Sleep(10)
을 사용하여 1에서 100까지의 사이클은 C++ Builder와 C++ MFC.
이제 Sleep(10)
은 10 밀리 초를 대기합니다. 승인. 그러나 문제는 내가 열린 미디어 플레이어, 윈앰프 또는 "사운드"를 생산하는 다른 것 밖에없는 경우입니다. 모든 미디어 플레이어, 윈앰프 및 기타 사운드 프로그램을 닫으면 내 스레드가 10 밀리 초보다 느려집니다.
50-100 ms/each
이 필요합니다. 어떤 음악을 열면 정상적으로 작동합니다.
왜 이런 일이 발생하는지 전혀 알 수 없습니다. 처음에는 MFC App 내부에서 실수를했다고 생각했지만 C++ Builder는 왜 느려지 죠?
그리고 예, 나는 창문을 재구성하고 모든 것을 사용할 수 없기 때문에 소리와 관련이 있다는 것을 확실하게 확신합니다. 마지막으로 나는 그 소리 문제를 발견했다.
내 코드에 뭔가 필요한 것이 있습니까?
업데이트 :
지금, 나는 코드를 따라 내가 1 밀리 초를 기다려야 등의 분야에서 Sleep(1)
를 사용하는 것을 발견했다. 그 이유는 객체를 왼쪽에서 오른쪽으로 이동시키기 때문입니다. 이 수면을 제거하면 매우 빨리 움직이기 때문에 움직이지 않습니다. 따라서 Sleep(1)
을 사용해야합니다. Sleep(1)
으로 오디오가 이고 인 경우 작동합니다. 오디오가 이면보다 매우 느립니다.
for (int i = 0; i <= 500; i++) {
theDialog->staticText->SetWindowsPosition(NULL, i, 20, 0, 0);
Sleep(1);
}
그래서, 이에 관한 제안은 정말 감사하겠습니다. 어떻게해야합니까?
나는 이것이 잘못된 방법이라는 것을 알고 있습니다. 적절하고 타당한 다른 것을 사용해야합니다. 그러나 정확하게 무엇? 정적 텍스트를 한 위치에서 다른 위치로 부드럽게 이동시키는 데 어떤 기능이나 클래스가 도움이됩니까?
또한 우선 순위의 스레드를 변경해도 도움이되지 않았습니다.
업데이트 2 :
업데이트 1은 또 다른 질문 : 적어도 10 밀리 초 동안
흥미 롭군요. 차이점을 발견했을 때 프로세스의 우선 순위는 여전히 동일합니까? – Brad
프로세스의 우선 순위는 같습니다. 두 번째 흥미로운 점은, 미디어 플레이어를 열었을 때 (음악을 재생하지 않으면) 내 스레드 프로그램이 CPU와 스레드의 2 %로 실행된다는 것입니다. 미디어 플레이어를 닫으면 즉시 느려지고 CPU 사용률은 0 %입니다. – xangr
이것은 CPU의 빈도를 조절하는 프로세서 때문일 수 있습니다. – johnathon