草庐IT

c++ - 来自主线程的 VTK 窗口线程,C++

我只是在学习VTK(和C++GUI编程)并且希望有简单的问题。主应用程序在应用程序的某个时刻启动呈现的窗口。希望能够让主线程继续,同时显示VTK窗口。是否有特定的方法将VTK窗口作为线程启动?我的环境是Linux,我可以使用boost和pthreads。谢谢。VTK是可视化工具包,参见vtk.org 最佳答案 您可以调用vtkRenderWindowInteractor->Start()方法。(如果您没有创建交互器,请从您的渲染器获取交互器)。VTK中包含大量示例;你应该看看那些!如果您没有它们,请确保在使用cmake构建VTK时,

c++ - 如何使用 vtk 实时可视化在另一个线程中运行的计算

我想使用可视化工具包在另一个线程中实时可视化正在运行的计算。计算吐出一组新的值,以便在每次迭代时可视化,图形线程必须知道这些并加载新值。一种方法是让主线程轮询计算的状态。理想情况下,我不想进行任何轮询,但如果没有其他方法,我会进行。我能想到的最好方法是让计算线程在每次计算迭代时将一个事件推送到主线程的事件队列中,然后由GUI进行处理。我不确定如何去做,或者是否可以以线程安全的方式完成。我在Linux上使用pthreads在gcc/C++中使用vtk。 最佳答案 在主线程中使用vtkCommand(或适当的派生类)监听您感兴趣的对象的

c++ - 如何在 Qt 主线程中正确执行 GUI 操作?

我有一个包含两个线程的简单程序:由QtQApplication::exec操作的主要GUI线程由boost::asio::io_service操作的TCP网络线程TCP事件,例如连接或接收数据会导致GUI发生变化。大多数情况下,这些是QLabel上的setText和隐藏各种小部件。目前,我正在TCP客户端线程中执行这些操作,这似乎很不安全。如何将事件正确发布到Qt主线程?我正在寻找boost::asio::io_service::strand::post的Qt变体,它将事件发布到boost::asio::io_service事件循环。 最佳答案

主线程等待所有子线程结束的4种方法

目录主线程不等待子线程全部结束1、使用CountDownLatch2、同步屏障CyclicBarrier2.1、CyclicBarrier使用2.2、CyclicBarrier复用2.3、CountDownLatch和CyclicBarrier的区别3、使用Future.get()4、使用Completable.allOf()主线程等待所有子线程结束的4种方法,包括使用CountDownLatch、CyclicBarrier、Future.get()、Completable.allOf()。主线程不等待子线程全部结束publicclassWaitThreadsDemo{privatestati

c++ - 加入线程如何影响主线程中的执行顺序?

我知道线程是并发运行的,所以你无法预测执行顺序,但在提供的代码中,我在运行其他任何东西之前加入了线程t4。如果.join()应该等到线程完成执行,那么为什么顺序仍然是随机的?在两个print语句之前加入任何内容总是会导致它们最后打印,而如果我在之后加入所有内容,它并不总是最后,为什么?voidtask(){std::cout 最佳答案 std::thread::join只阻塞当前线程,直到*this标识的线程完成执行。所以这向您保证mainsaysHi1不会在task4saysHi和mainsaysHi2之前打印在其他三个任务完成执

c++ - 与主线程相比,辅助线程崩溃是否有优势?

我在一个大型代码库中看到这段代码DWORDWINAPIThreadFunc(LPVOIDlpParam){int*x=0;*x=1234;//Accessviolationreturn0;}voidManager::Crash(){Log("ReceivedaremotecommandtocrashServer.");DWORDdwThreadId,dwThrdParam=1;HANDLEhThread=::CreateThread(NULL,0,ThreadFunc,&dwThrdParam,0,&dwThreadId);}我的问题是:为什么要使用线程?如果ThreadFunc中的代

C++11 线程,在主线程上运行

我正在尝试C++11线程进行一些开发。我想在异步线程中运行一些代码,当该代码完成后,我想在主线程上运行其他代码但只有当它完成时!这是因为我想要异步运行的事情是加载OpenGL的东西,并且在执行线程时它对OpenGL上下文有点棘手,据我所知这几乎是一个不在不同的环境中运行相同的上下文线程。但是我想创建一个加载器线程,它加载collada文件,这里耗时的东西实际上是解析文件和设置数据以及我可以(技术上)在一个单独的线程中做的所有事情,然后只需在主线程上执行特定于opengl的任务。(这是我最初的想法,我可能只是走错了路)。所以我在想,如果我可以分离一个异步线程来加载collada文件并填充

c++ - 执行成员函数时对象被删除?

我有指向单例类的指针对象。线程1:当前正在执行上述对象的一个​​成员函数。线程2:当对象的成员函数还在被线程1执行时,删除上面的对象。正在执行成员函数的线程1发生了什么?是否会中途停止执行? 最佳答案 这可能是未定义的行为,除非你格外小心。在您的线程以无序(非同步,基本上)方式访问对象时删除该对象是未定义的行为,即使您走运也是如此。在与主线程的删除同步后访问对象的成员(不仅仅是运行成员:实际访问成员——调用成员函数、读取成员变量等)也是未定义的行为。如果你小心地与主线程同步,那么在同步之后不要访问成员数据也不要调用不同的成员函数,并

c++ - 什么时候调用 CloseHandle?

我有一个主线程接收需要一些时间的Action。所以我创建了一个线程并将工作委托(delegate)给它。主线程在接收作业时调用此执行函数。每个作业都执行此执行。Return_typeexecute(Arguments_here){//ifafilereadcaseDWORDthreadId;HANDLEhThread=CreateThread(NULL,//defaultsecurityattributes0,//usedefaultstacksizeMyAsyncFileRead,//threadfunctionnamedetails,//argumenttothreadfuncti

c++ - 为什么我需要从主线程使用 `pthread_exit()`,而它不是由 `pthread_create` 创建的?

我对一些正在测试以开始理解posix线程的代码有疑问。我有这个基本代码:#include#include#include#includeusingnamespacestd;void*printInfo(void*thid){longtid;tid=(long)thid;printf("Hellofromthread%ld.\n",tid);pthread_exit(NULL);}intmain(intargc,charconst*argv[]){intnum=8;pthread_tthreadlist[num];intrc;longt;for(t=0;t非常简单的代码,启动线程并从中打