Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;具有异步采集的时间关键型QT、UART、ISAAC和dll的跟踪策略_C++_Multithreading_Qt_Arduino_Nvidia - Fatal编程技术网

C++ C++;具有异步采集的时间关键型QT、UART、ISAAC和dll的跟踪策略

C++ C++;具有异步采集的时间关键型QT、UART、ISAAC和dll的跟踪策略,c++,multithreading,qt,arduino,nvidia,C++,Multithreading,Qt,Arduino,Nvidia,我正在开发一个应用程序,其中包含以下SDK和“部件”: 用于GUI的Qt UART上的Xbox one控制器 UART上到期的arduino 艾萨克·沃() 通过dll库()访问的IMU UVC V4L2立体相机 IMU似乎只能通过phidget Spacial API访问,phidget Spacial API会自动对应用程序执行线程(线程频率精度较差) 因为我的Qt-GUI有一个依赖于时间的绘图,所以我用QTimer线程化了update-plot函数 以下是我的梦想: main loop

我正在开发一个应用程序,其中包含以下SDK和“部件”:

  • 用于GUI的Qt
  • UART上的Xbox one控制器
  • UART上到期的arduino
  • 艾萨克·沃()
  • 通过dll库()访问的IMU
  • UVC V4L2立体相机
IMU似乎只能通过phidget Spacial API访问,phidget Spacial API会自动对应用程序执行线程(线程频率精度较差)

因为我的Qt-GUI有一个依赖于时间的绘图,所以我用QTimer线程化了update-plot函数

以下是我的梦想:

main loop(){ (30Hz)
//Get (Async)
getControllerInput();(60Hz UART)
getQtInput();(60Hz)
getArduinoInput();(12Hz UART so sometimes compute with old datas)
getIMUInput();(250Hz UART throug Spatial API )
getCameraInputFromIsaac();(60Hz)
//Process (Sync in some parts)
ProcessIMURectification();(250Hz)
ProcessDataForIsaac();(60Hz)
SendIMUToIsaac();(60Hz)
SendCameraToIsaac();(60Hz)
ComputeIsaac();(30Hz)
GetIsaacOutup();(30Hz)
ProcessDataForArduinoAndQT();(60Hz)
//Output (Async)
SendDataToArduino();(60Hz UART)
SendDataToQt();(60Hz)
} 
有了这些线程,我只是不想选择错误的方法,我尝试了std-lib线程,还看到了一些关于期货/承诺Vs.套接字的帖子,但我不知道witch是最好的

我的问题是:

  • 有没有一种方法可以优先使用线程来避免Qt-GUI(非时间关键型)占用大量资源

  • 一些线程方法是否比其他方法更节省资源(我在jetson nano上运行,所以库存中没有很多资源)

  • 我应该在GPU上执行CUDA函数以充分利用jetson nano的潜力吗

  • 主要问题:考虑到所有这些,有没有一种方法比另一种更好


谢谢谢谢谢谢!

谢谢@Laszlo,是吗

mythread(){ 
if(lasttime-time()<1/frequency){
      pocess();
      lasttime=time();
}
else{
      usleep((1/frequency) - (lasttime-time()) )
}
mythread(){

如果(lasttime-time()*是,则有:QThread::currentThread()->setPriority(QThread::HighPriority)是的,有。我会使用QThread线程管理器。*这取决于你。但是为什么不保持GUI线程干净。*我会使用QThread,因为它对资源的要求最低。顺便说一句,它不是Qt。每个问题一个问题。这不是设计圆桌会议。是的,你是对的。我唯一的问题是:在这个cas中,哪种线程方法是最好的,cuda认为这有点出格了抱歉。明白了:Qt线程有一些功能,我可以通过ez操作来实现这一点再次感谢:)我将使用以下内容:QeReleasedTimer和QThread::requestInterruption()和currentThread()->setPriority和QSemaphore,它们应该可以完成这项工作