내 프로그램은 내가 원하는 것보다 훨씬 많은 CPU 시간을 소비합니다 (2 개의 디스플레이는 최대 80-90 %까지 슛합니다). Qtimers를 사용하고 있으며 그 중 일부는 2ms 정도입니다. 어떤 주어진 시간에, 나는 디스플레이 당 12+ 타이머를 가질 수 있습니다 - 2ms, 2ms, 2ms, 250ms, 나머지는 200ms와 500ms 사이입니다. 이 중 일부 또는 전부 (특히 짧은 것들)에 스레드를 사용하면 더 좋을까요? 그것이 다름을 많이 줄까요?QTimer 대 개별 스레드
답변
주된 시간 문제는 우선 순위가 높은 타이머에서 발생합니다. 먼저 QM 클래스의 오버 헤드를 극복하기 위해 매 2ms마다이 코드가 필요하다는 것을 확인하십시오. 3 초의 시간 제한을 하나로 그룹화 할 수 있으며 매번 코드 섹션을 순차적으로 실행합니다. 나는 스레딩이 문제를 해결할 것이라고 생각하지 않습니다.
음,이 짧은 타이머 속도는 19200 전송 속도에서 RS-232 전송 속도를 기반으로합니다. 읽기 용 타이머 하나, 쓰기 용 타이머 한 개, 버퍼 검사 용 타이머 한 개. 250ms 타이머는 응답 타임 아웃을위한 것입니다 (디스플레이는 그 시간 내에 응답해야합니다). 나머지 타이머는 표시 텍스트 또는 일부 다른 조작을 갱신합니다. 나는 확실히 3 개의 타이머를 하나로 결합 할 수있다. – Scott
아, 그럼 당연하지. 미안하지만, 당신의 질문은 정말로 "지금 네일을 넣기 위해 필립스 드라이버가 필요합니까?"와 같이 보입니다. 아니, 망치가 필요해. 이 경우에는 인터럽트 구동 I/O가 필요할 것입니다. Qt 직렬 클래스가'QIODevice :: readyRead'를 지원합니까? – MSalters
2ms 솔기가 나를 의심합니다. 사람들은 CPU에 과부하가 걸리지 않고 수년간 직렬 포트에 19200 보 (예 : 486 하드웨어)를 읽고 쓰고 있습니다. 어쩌면 당신의 접근 방식이 잘못되었을 수도 있습니다.
포트에 액세스하는 데 사용하는 API는 무엇입니까? api가 블로킹을 지원하면이 메소드가 훨씬 더 나은 접근 방법이 될 것입니다.
가장 간단한 방법은 독자 스레드에서 읽고 쓰는 것입니다. 루프에서 블로킹 읽기를 사용하면 스레드가 읽을 데이터가 있고 처리중인 경우에만 스레드가 사용 중입니다. 응용 프로그램은 쓰기가 필요한 시점을 알아야하므로 올바른 스레드가 조건 변수를 기다려야 할 때 데이터를 사용할 수있을 때이 조건이 쓰기 쓰레드를 깨우기 시작합니다.
직렬 포트 (예 : x 모뎀)에서 읽고 쓰는 첫 번째 응용 프로그램이 멀티 스레드가 아닌 것은 확실하지만 아마도 문서화되어 있어야합니다. 당신이 사용하고있는 API.
- 1. 스프라이트 대 개별 이미지
- 2. pygtk 응용 프로그램의 개별 스레드
- 3. 하드웨어 스레드 대 부드러운 스레드?
- 4. 여러 스레드 대 단일 스레드
- 5. 스레드 풀 대 스레드 산란
- 6. 배경 스레드 대 UI 스레드
- 7. 스레드 ID 대 스레드 핸들
- 8. 스레드의 QTimer - 이벤트가 처리되지 않습니까?
- 9. QDragEvent 문제가있는 QTimer
- 10. QTimer 기본 프로그램 도움말
- 11. QTimer 특정 시간 시작
- 12. 데카 프 스레드 대 부스트 스레드 대 omnithreads
- 13. 처리기 대 스레드
- 14. 커널 스레드 대 타이머
- 15. 스레드 대 코어
- 16. 스레드 대 스레딩
- 17. 스레드 대 .NET의 프로세스
- 18. 응용 프로그램 스레드 대 서비스 스레드
- 19. 문자 당 스레드 대 맵당 스레드 디자인
- 20. 멀티 스레드 대 Asp.net 3.5 싱글 스레드
- 21. 정적 라이브러리 대 개별 객체 파일과의 연결
- 22. QTimer & Select를 사용하십시오. 경매가 작동해야합니다.
- 23. java.util.concurrent 대 부스트 스레드 라이브러리
- 24. Linux 대 Solaris의 스레드 성능
- 25. Google App Engine : 작업 대 스레드?
- 26. QGIS (Quantum GIS)에서 QTimer 발사 문제
- 27. qtimer 및 qthread를 사용하는 논리에 결함이 있습니까?
- 28. 스레드 된 이미지 대 비동기 이미지 처리?
- 29. 스레드 호출 .NET. this 대 .control
- 30. 파이썬 : 스레드 대 멀티 프로세싱 사용시기
타이머가 쓰레드를 기다리는 중입니까? 스레드를 활성 상태로 유지하는 다른 방법이있을 수 있습니다. – bua
bua : 글쎄, 나는 쓰레드를 직접 사용하지 않고있다. Qt가 장면 뒤에서 Qt를 사용한다면, 나는 그것을 알지 못합니다. 나는 단순히 주 스레드에서 하나의 루프를 실행하고 거기서 모든 스케줄링을 수행했다는 인상을 받았다. – Scott
메인 스레드와 관련하여 올바른 인상을주었습니다. 타이머 중 일부를 취소하여 시간이 많이 걸리는 아이디어를 얻을 수 있습니까? 시간이 많이 걸리는 타이머 나 간격의 양이라고 생각하지 않습니다. 시간이 많이 걸리는 경우가 많습니다. –