草庐IT

Multithreading

全部标签

c++ - 多线程 SQLite 崩溃

我正在尝试在多线程C++程序中使用SQLite3.7.5。我已将其缩小为几行简单的代码:sqlite3*Database;sqlite3_stmt*Stmt;intretval=sqlite3_open("database.db3",&Database);retVal=sqlite3_prepare(&Database,"CREATETABLERawData(KeyCHAR(5))",-1,&Stmt,0);retval=sqlite3_step(Stmt);retval=sqlite3_finalize(Stmt);当我直接从我的主进程调用这段代码时,它工作正常。但是,如果我使用Cr

c++ - 我可以将英特尔的 TBB 与 gcc 一起使用吗?

我可以将intel的TBB与gcc一起使用吗?如果不是,什么是等价物,以便我可以在使用gcc编译时使用它?我不认为我可以,但问总是更好。 最佳答案 你可以,这就是他们的documentation不得不说:DoIhavetouseIntel’scompilers?No.YoushouldbeabletouseanyISOcompliantC++compiler.Wehavetesteditverywellonthegnu(gcc)compiler,Intel’sC++compiler,Microsoft’scompiler,andAp

c++ - Qt 在构建移动到线程的 QObject 时将 "this"作为父级传递

阅读文档后我发现了这个:ThechildofaQObjectmustalwaysbecreatedinthethreadwheretheparentwascreated.Thisimplies,amongotherthings,thatyoushouldneverpasstheQThreadobject(this)astheparentofanobjectcreatedinthethread(sincetheQThreadobjectitselfwascreatedinanotherthread).我不太确定这意味着什么,所以我举了几个例子,想知道这适用于什么地方。A.classMyT

c++ - fork() 除了执行外部程序之外的用处

我阅读的有关fork()的教程、手册和其他资源通常只包含可以使用线程更好地解决的示例。他们只是交流,做一些非常基本的任务,然后再次交流以分享或展示结果。我有一种感觉,除非你的意图是启动一个外部程序(通过让父亲继续和child启动那个外部程序),否则线程总是比fork更容易处理、更灵活、更安全。当fork()优于仅使用线程时,还有其他应用领域吗?除了病毒,就是这样。 最佳答案 您可以使用fork()作为一种在不停止原始应用程序的情况下从应用程序生成快照的简单方法。由于操作系统将进程的虚拟内存映射为写入时的拷贝,因此除了已更改的数据(加

c++ - wxHTTP 和线程

我在线程内使用wxHTTP时遇到了一些问题。我创建了以下派生自wxThread的类以使用wxHTTP。classThread:publicwxThread{private:wxHTTPget;public:Thread(){}~Thread(){}virtualExitCodeEntry(){get.SetHeader(wxT("Content-Type"),wxT("text/html;charset=utf-8"));get.Connect(wxT("www.mysite.com"));get.SetTimeout(1);wxInputStream*httpStream=get.G

c++ - openMP - 并发访问变量和原子

我想用openMP并行化一个对框进行采样的函数(在框中随机选择点,并在这些点上评估给定函数)。我写了下面的代码。//storingpointsdouble**points_=newdouble*[N-m];for(inti=0;i但是,我对这段代码没有信心:evals_和points_在each线程中更新。我想在那里添加一些原子语句:#pragmaompparallelforfor(inti=0;i但我担心这会非常低效:你有什么建议可以更准确地写出来吗?并且...这不是编译...(错误:#pragmaompatomic之后的表达式形式不正确)尽管我可以在openMP规范A22中找到该示

c++ - PySide 中的多线程 Boost Python C++ 代码

我有用BoostPython包装的C++代码。我的想法是,我创建了一个共享对象,我的pythonGUI可以使用它来实例化包装C++功能的变量C++代码做了一些提升,我希望能够使包装对象并发运行,这样GUI就不会阻塞。我编译了一个用CMake包装的BoostPython共享对象,如下所示:find_package(BoostCOMPONENTSsystemthreadpythonREQUIRED)find_package(PythonLibsREQUIRED)include_directories(${Boost_INCLUDE_DIRS})include_directories(${P

c++ - C++中的静态初始化和线程安全

类实例的静态初始化不是线程安全的。下面的代码是不该做什么的示例:externintcomputesomething();classcachedcomputation{public:cachedcomputation(){result=computesomething();}intresult;};voidusecached(){staticcachedcomputationc;//useofc.result-maybreak}但是,下面的代码是线程安全的吗?(忽略解决方案的丑陋之处)它何时或为何会崩溃?externintcomputesomething();classcachedcom

C++ 编译器错误 "cannot be thread-local because it has non-POD type”“

这个声明:___threadAa;生成此错误:cannotbethread-localbecauseithasnon-PODtypeA在哪里classA{public://functiondeclarationprivate://datamembers};我正在尝试使用命令ogsincludes&ogsmk在Linux上进行编译。我们有静态线程,即在我们的应用程序进入之前,我们知道线程的数量,因此目前的工作是通过声明A的数组来完成的,即Aa[Numberofthreads].我该如何解决这个问题? 最佳答案 假设您使用gcc,线程本

c++ - 从串口读取恰好 N 个字节

如何从串口准确读取N字节?我需要我的线程阻塞,直到至少N字节在端口上可用或预设超时已过期。超时值和N都应该在运行时可变。注意:在Linux上使用C/C++,带或不带boost。 最佳答案 termios中有VMIN属性用于此目的。它可用于防止read()在没有足够字节可用时返回。例子:tcgetattr(fd,&termiosv);termiosv.c_cc[VMIN]=N;termiosv.c_cc[VTIME]=20;tcsetattr(fd,TCSANOW,&termiosv);MoreaboutVMIN.注意:它对selec