0

함수를 가지고 행렬에 대한 연산을 수행하는 foo()를 호출 해 보겠습니다. 콘솔 응용 프로그램에서 함수를 호출하면 결과를 반환하는 데 1 초가 필요합니다. 윈도우 폼 애플리케이션 (버튼 클릭, 새 스레드 시작, 스레드에서 foo() 호출)에서 함수를 호출하면 반환하는 데 3 초가 걸립니다. 동일한 입력 및 동일한 출력으로 Windows 폼을 처리하는 스레드가 여전히 활성 상태이기 때문에 어떻게 생각합니까?스레드 우선 순위 및 함수 실행 시간

+0

생각하지 마십시오. 법안. –

+0

잘 c_clock 함수를 계산하는 시간을 측정하는 방법을 모르겠다, 내가 어떻게 생각하는지 그 스레드에 액세스하는 방법을 모르기 때문에, 양식을 처리하는 스레드가 보낸 시간을 측정하는 방법을 모르겠다. – andrea

+0

나는 의미한다. 프로파일 러를 사용하십시오. .NET은 당신의 등 뒤에서 많은 간단한 일을 망칠 수 있기 때문에'clock '으로 측정하는 것은 매우 부정확 할 것입니다. –

답변

1

나는 왜 당신이 양식 이벤트 스레드를 죽이고 싶지는 모르겠다. 그러면 응용 프로그램을 사용할 수 없게됩니다. 그 스레드는 어쨌든 계산 집약적 인 작업을 실행하지 않고 양식상의 이벤트를 기다리고 있으므로 우선 순위를 낮게 설정하는 것에서 얻는 것은 거의 없습니다.

스레드가 완료되는 데 걸리는 시간을 정확하게 지정하십시오. 콘솔 응용 프로그램에 나타나지 않는 스레드 시작/중지와 관련된 특정 오버 헤드가 있습니다.

+0

나는 이렇게하고있다 : clock_t finish (clock()); foo(); clock_t finish (clock()); int n = finish-start; 콘솔의 경우 값은 약 1000이고, 창 형태는 약 3500입니다. 그 소리는 저에게 이상합니다. 이 함수는 실제로 동일합니다. 버튼 클릭으로 호출되는 스레드를 추가했습니다 ... 그게 전부예요. – andrea

+0

어떻게하면 스레드에서 'n'신호를 보내고 표시할지, 아니면 디버거에서 스레드를 중지하고 중단하고 검사하는지 계산 된 후에? 값은 @Tudor에 의해 암시 된 것과 같아야합니다 - 동일한 작업을 수행하는 동일한 코어 유형입니다. 1000-3000 프로세서 틱에서는 ​​foo()가 어떤 것으로 인해 중단되었다는 것을 발견하는 것이 불행 할 것입니다. 테스트를 두 번 이상 수행했음을 확신합니다. 어떤 스레드에 의해 시작되면 foo()가 return 및 second clock_t 호출 때까지 실행될 가능성이 높습니다. –

+0

잘 나는 opencv 라이브러리에 정의 된 함수가 콘솔보다 Windows에서 4 배 이상 걸리는 것을 발견했습니다. 방금 함수를 다시 작성하고 성능은 거의 동일합니다. – andrea