2011-01-27 5 views
1

내 소프트웨어는 몇백 개의 하드웨어 장치를 시뮬레이트합니다. 각 하드웨어 장치는 데이터베이스 서버에 수천 개의 보고서를 보냅니다.스레드에서 주 프로그램으로 피드백

스레딩을 사용하지 않고 시도해도 좋은 결과는 없었으므로 이제는 스레드 할 시간입니다.

d/b 서버를로드 테스트 중이므로 일부 트랜잭션은 성공하고 일부 트랜잭션은 실패 할 수 있습니다. 주 프로그램의 GUI는이를 반영해야합니다. 스레드가 결과를 메인 프로그램으로 어떻게 다시 전달해야합니까? 전역 변수를 업데이트 하시겠습니까? 메세지를 보내다? 아니면 뭔가?

이제 각 스레드의 끝에서만 업데이트하면 GUI가 다소 지루 해 보일 것입니다. (프로그램이 멈췄는지 알 수 없습니다). GUI를 주기적으로 업데이트하는 것이 좋습니다. 하지만 그 스레드는 다른 스레드가 업데이트되기를 기다리는 경합을 일으킬 수 있습니다 (예를 들어 전역 변수에 쓰는 경우 쓰기를 기다리는 각 스레드를 차단하는 뮤텍스가 필요합니다).

나는 스레딩을 처음 사용합니다. 이것이 정상적으로 어떻게 이루어 집니까? 아마도 주 프로그램이 스레드 대신 주 스레드를 폴링 할 수 있습니까?

답변

2

이것을 구성하는 한 가지 방법은 스레드가 데이터를받을 때 스레드로부터 스레드 안전 대기열 (예 : ConcurrentQueue)에 메시지를 추가하는 것입니다. 일을 단순하게 유지하기 위해 대기중인 메시지를 주기적으로 비공개 목록에서 큐에 넣고 렌더링하는 UI 스레드에서 타이머 스레드를 사용할 수 있습니다. 이 디자인을 사용하면 스레드가 최소한의 경합으로 메시지를 대기열에 넣고 잊어 버릴 수 있으며 UI가 주기적으로 작성자를 차단하지 않고 (즉, 현재 메시지를 비공개 목록에서 대기열에서 제외하는 데 소요되는 기간 동안) 정기적으로 자체를 업데이트 할 수 있습니다.

수백 개의 장치로드를 시뮬레이션하려고 시도하지만 장치 당 스레드를 사용하는 것은 모델링하는 방법이 아닙니다. 어쨌든 많은 스레드를 동시에 실행할 수 있기 때문입니다.

+0

+1 유용한 정보를 제공해 주셔서 감사합니다. 내가 동시에 실행할 수있는 스레드를 어떻게 알 수 있습니까? 그리고 너는 무엇을 추천하니? 아마도 각 장치마다 총 장치 수 또는 장치 당 하나의 PC가 아닌 X 장치를 시뮬레이션하고 Y PC를 사용하게하십시오. 이런 종류의 것을 테스트하는 가장 좋은 방법은? – Mawg

관련 문제