아마 스레드에서 루프를 실행합니다. 두 개의 Event 객체를 설정합니다. 하나는 처리가 완료되었음을 알리는 신호이고, 다른 하나는 스레드가 종료되어야한다는 신호입니다. 이 스레드는 루프를 종료 할 때 첫 번째 스레드를 설정합니다. WaitForSingleObject (예를 들어)를 호출하여 주기적으로 두 번째를 확인합니다. 시간 초과가 0이면 WaitForSingleObject는 몇 밀리 초마다 한 번 수행 할 것으로 예상 할 수 있습니다. 1e6 반복과 30ms가 주어 졌을 때 30,000 번의 반복을 한번 해봅시다. 해당 이벤트가 설정되면 루프를 종료합니다.
첫 번째 이벤트에는 WaitForSingleObject를 수행하는 다른 스레드가 있습니다. WaitForSingleObject를 호출하면 30 밀리 초의 제한 시간을 지정합니다. WaitForSingleObject가 반환되면 반환 값을 확인합니다. 이벤트가 설정되어 리턴 된 경우 처리가 완료되며 계속 진행할 수 있습니다. 시간이 초과되면 두 번째 이벤트를 설정하고 스레드가 이벤트를 다음에 확인하면 처리를 중지하라는 신호가 표시되어 루프를 종료합니다.
분명히 가능한 유일한 방법은 아니지만 매우 간단한 오버 헤드가 있어야하는 매우 간단한 방법입니다. 루프에서 발생하는 유일한 부분은 WaitForSingleObject에 대한 zero-timeout 호출입니다.
비교적 최근의 CPU를 테스트 한 결과 각 호출에 약 0.2 마이크로 초가 걸릴 것으로 예상되므로 총 30 마이크로 초의 처리 시간이 추가됩니다. IOW, 처리 속도가 1 % 미만으로 느려지고 있습니다. 나는 처리 속도의 차이를 신뢰할 수있게 측정 할 수 있다는 것을 의심의 여지가 없다.