저는 cypress FX2LP를 사용하여 30 메가 바이트 USB 데이터 전송을 원하고 동시에 다이어그램을 그립니다. 이 30 메가 바이트의 전송 속도를 다루는 전략은 읽기 스레드에서 1 메가 바이트 데이터를 읽은 다음 main_thread에 플로팅하는 것입니다. 그러나이 전략은 1 메가 바이트 버퍼가 필요하며 보드에 그러한 메모리가 없습니다.USB 높은 데이터 전송을위한 가장 좋은 방법은 무엇입니까?
다른 해결책이 있습니까?
저는 cypress FX2LP를 사용하여 30 메가 바이트 USB 데이터 전송을 원하고 동시에 다이어그램을 그립니다. 이 30 메가 바이트의 전송 속도를 다루는 전략은 읽기 스레드에서 1 메가 바이트 데이터를 읽은 다음 main_thread에 플로팅하는 것입니다. 그러나이 전략은 1 메가 바이트 버퍼가 필요하며 보드에 그러한 메모리가 없습니다.USB 높은 데이터 전송을위한 가장 좋은 방법은 무엇입니까?
다른 해결책이 있습니까?
이 경우 스레드가 필요하지 않습니다. 간단한 단계로 문제 아래
브레이크 :
1 단계의 경우 실제 전송 내용이 필요하지 않습니까? 타이밍 만 있으면됩니다. 기본적으로 더미 데이터를 전송하려면 /dev/null
에 넣으십시오. 그러나 많은 메모리를 먹지는 않을 것입니다. (nbytes_transferred, timestamp)
의 목록을 저장하십시오. 저장, 테스트/검증, 다음
스레드 중 하나 매끄러운 UI 위해 절대적으로 필요하지 않은 2 단계
편집 구현을 진행합니다.
차단/동기 IO를 피하기 위해 만 수행하면됩니다.; 비동기/비 차단 방법을 사용하십시오.
Java에서는 NIO와 같은 의미입니다. Qt에서 - QtConcurrent
과 QFuture
을 사용할 수 있습니다.
은 사실상 event loop 모델을 기반으로 모든 GUI 툴킷 작품 :, 또 다시 같은 사용자의 키 누름 또는 마우스 사용으로 이벤트 (의 OS를 쿼리 (일반적으로 application.run()
전화 안에 숨겨져)는 메인 루프 롤있다 [비동기] 네트워크 또는 디스크 IO 완료 또는 진행 중일 때) 핸들 또는 이 이벤트를 처리하고 결국 onButton1Click
메서드를 호출하고 처리 할 이벤트가 더있을 때까지 잠자기 상태가됩니다.
"이벤트"를 onIdle
에 연결하는 방법은 일반적으로 메인 루프가 비활성 상태 (CPU 전력 & 에너지를 절약하기 위해)로 잠들기 직전에 발생합니다. Qt에서 이것은 0 타임 아웃 QTimer
이거나 QAbstractEventDispatcher::aboutToBlock()
콜백입니다. 자세한 내용은 this question을 참조하십시오.
이 모든 것이 너무 복잡하면 아마도 this libraryGitHub에서 친절하게 좋은 회사를 확인해보십시오. (나는 단지 Google 순간에 그것을 발견했다, 어떤 제휴도). 출처에서 보면 libusb-1.0
에 대한 Qt-onic 개의 API를 제공하는 것처럼 보입니다. 크로스 플랫폼 USB 액세스에 가장 많이 사용됩니다. 오, 그들은 0- 타임 아웃 QTimer
접근 방식을 선택했습니다.
스택 오버플로에 오신 것을 환영합니다! 질문에 대한보다 나은 응답을 얻을 수 있도록 [How Minimal, Complete, Verifiable] (http://stackoverflow.com/help/mcve) 예제를 작성하는 방법을 확인하십시오. –