草庐IT

c++ - 线程池 C++

我有以下for循环:for(inti=0;i我只想用5个线程来运行这个函数,我该怎么做?我无法使用任何外部库。我尝试的是创建一个包含5个线程的数组,如果索引等于5则等待所有线程并再次执行此操作,但我确信还有另一种方法可以做到这一点:std::threadt[THREAD_COUNT];intj=0;for(inti=0;i有什么建议吗?(我不能使用boost)谢谢! 最佳答案 您可以创建一个函数来测试您的线程数组,以找到一个空闲线程来运行每个连续的作业。像这样://synchronizedoutputtopreventinterle

C++11 <thread> 使用 OpenGL 进行多线程渲染可防止主线程读取标准输入

它似乎与平台相关(在我的笔记本电脑上使用Ubuntu12.04,在我的工作站上不使用另一个Ubuntu12.04)。这是关于我使用两个线程执行的操作的示例代码。#include#include#include#include#includeusingnamespacestd;intmain(){atomic_boolg_run(true);strings;threadt([&](){cout>s;cout这是我的编译参数:g++-std=c++0x-omainmain.cc-lpthread-lglfw我的笔记本电脑运行这个程序,像这样:initinitedrenderrenderqu

c++ - 抑制警告 "QApplication was not created in main() thread"

我已经创建了一个基于Qt的网络库,用于不运行Qt事件循环的应用程序,这些应用程序不一定是Qt应用程序。这是通过根据IsitpossibletocreatelocaleventloopswithoutcallingQApplication::exec()?的答案在线程中创建一个QCoreApplication实例来实现的。这工作得很好,但它让Qt不高兴(我想它担心我会尝试在主线程之外操作一个GUI,这不会工作,但我没有),所以它打印一个警告:警告:QApplication不是在main()线程中创建的。我想抑制该警告,否则该警告将打印到X11控制台并且很可能导致我的用户输入一堆不必要的缺

c++ - pthread_create() 和内存泄漏

这个问题好像问的很多。我有一些看起来不错的遗留生产代码,直到它开始每天获得更多的连接。每个连接都会启动一个新线程。最终,它会耗尽内存并崩溃。我将回顾我多年未处理的pthread(和C套接字)。我的教程内容丰富,但我在使用top时看到了同样的事情。所有线程退出,但仍有一些虚拟内存被占用。Valgrind告诉我调用pthread_create()时可能会丢失内存。最基本的示例代码如下。最可怕的部分是,当所有线程退出时,pthread_exit(NULL)似乎在VIRT中留下大约100m的空缺。如果我注释掉这一行,它会更宜居,但仍然有一些。在我的系统上,它以大约14k开始,以47k结束。如果

c++ - 线程可以在对内核的系统调用中被抢占吗?

我正在运行2个线程(暂时假设它们是pthreads)。Thread_1()进行用户定义的API调用,最终在内核中完成一些工作。Thread_2()完全在用户空间中。我的问题是:当API调用正在进行时,Thread_2()能否通过抢占Thread_1()开始执行,控制权在内核中的某处?如果不是,为什么,如果我希望这种情况发生(出于任何原因),我必须做什么? 最佳答案 对内核的调用被认为是阻塞或非阻塞。阻塞调用(例如等待从网络套接字读取数据)当然可以被抢占,您无需采取任何行动。其他线程将继续运行。非阻塞内核调用可以被认为是非常快的,实际

c++ - 2个线程比1个慢?

我在玩std::thread时突然出现了一些奇怪的东西:#includeintk=0;intmain(){std::threadt1([](){while(k当使用clang++编译上述代码时没有优化,我得到了以下基准:real0m2.377suser0m4.688ssys0m0.005s然后我将代码更改为以下内容:(现在仅使用1个线程)#includeintk=0;intmain(){std::threadt1([](){while(k这些是新的基准:real0m2.304suser0m2.298ssys0m0.003s为什么使用2个线程的代码比使用1个线程的代码慢?

c++ - MacOS X 中的 C++ 线程

我正在尝试在MacOSXMavericks中使用标准C++(随XCode安装)中的线程运行一些代码。但是我遇到了一些错误。这是一个最小的工作示例:#include#includevoidrun(intx){std::cout我得到的错误:minimal.cpp:10:17:error:nomatchingconstructorforinitializationof'std::thread'std::threadt(run,0);^~~~~~/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolc

c++ - 双核机器上的多线程?

我有一个双核处理器,根据解释我只能使用2个线程,但实际上我可以同时启动2个以上的线程:这是解释的拷贝:Thestatichardware_concurrency()method,providedbytheboost::threadclass,returnsthenumberofthreadsthatcouldphysicallybeexecutedatthesametimebasedontheunderlyingnumberofCPUsorCPUcores.Callingthisfunctiononacommonlyuseddual-coremachine,avalueof2isret

c++ - 为什么 C++ 中的静态 thread_local 对象构造了两次?

这段代码:#include#include#includestructSingl{Singl(Singlconst&)=delete;Singl(Singl&&)=delete;inlinestaticthread_localboolalive=true;Singl(){std::cout具有以下输出:Singl()2Singl()21~Singl()2~Singl()2我正在使用mingw-w64gcc7.2POSIX线程在Windows下编译和运行。Coliru有不同的输出:http://coliru.stacked-crooked.com/a/3da415345ea6c2ee这是

c++ - clang thread_local 初始化中的错误

下面的代码应该只创建一次类内thread_local,但它最终会在每次访问时初始化它#include#includeusingstd::cout;usingstd::endl;templateclassSomething{public:structTLBookkeeping{TLBookkeeping(){std::coutthread_localtypenameSomething::TLBookkeepingSomething::bookkeeping_;templatevoidSomething::foo(){std::cout::foo();}(https://wandbox.o