草庐IT

0x00000001

全部标签

c++ - C、C++、C++0x、pthread 和 boost 中的线程

一个关于C/C++中线程的问题...C++0x语法#includevoiddummy(){}intmain(int,char*[]){std::threadx(dummy);std::thready(dummy);...return0;}有多少线程?两个(x和y)还是三个(x、y和主要)?我可以在main中调用this_thread::yield()吗?在main中调用this_thread::get_id()会得到什么?线程语法#includevoiddummy(){}intmain(int,char*[]){pthread_tx,y;pthread_create(&x,NULL,&

c++ - 手工自动模板(不使用C++0x)

如何在不使用c++0x标准的情况下实现auto关键字功能?for(std::deque>::iteratorit=points.begin();it!=points.end();++it){...}也许这样的类:classAUTO{public:templateAUTO(T1);templateoperatorT2();};这样的用法:for(AUTOit=points.begin();it!=points.end();++it){...}但是,T1和T2是不同的。如何将有关T1的信息移动到operatorT2()?真的可以吗? 最佳答案

c++ - C++0x lambda 和 operator()、闭包和仿函数之间的区别

我确信我了解了构造的一般要点,但我看不到它们在C++中的用途。我已经在SO和其他地方阅读过关于该主题的先前帖子,但我不明白为什么它们应该成为一种新的语言功能。我想回答的事情是这样lambda和接受函数/仿函数的模板参数有什么区别。闭包只是一个具有某些设置对象状态(作用域?)的仿函数吗?这些结构的“killer级应用”是什么?还是典型的用例? 最佳答案 Lambda实际上只是仿函数的语法糖。你可以自己做这一切:定义一个新类,创建成员变量来保存捕获的值和引用,将它们连接到构造函数中,编写operator()(),最后创建一个实例和通过它

c++ - C++0x RValue 引用或其他特性是否会对流性能产生影响?

大量分析表明,当需要性能(速度)时,C++流并不是执行文件或文本字符串操作的最佳方式。尽管如此,标准流仍然是保持类型安全的好方法。根据我的阅读,大部分问题是因为流实现必须1)创建/复制很多小对象2)不是完全通用的(不以相同的方式管理char和wchar?)等。无论如何,我在想也许某些C++0x允许实现者至少限制对象的创建/复制,也许还有其他功能可以实现其他性能改进,也许可以达到printf()的性能?是否有立竿见影的效果?还是我们必须等待新的实现?或者我们是否还需要一个新的(类似STL的)流库? 最佳答案 您可能对myquestio

c++ - 为什么在 C++0x 中有一个 sizeof... 运算符?

我看到@GMan实现了aversionofsizeof...对于可变参数模板,它(据我所知)相当于内置的sizeof...。这不违背第二个设计原则吗:preferlibrariestolanguageextensions? 最佳答案 来自VariadicTemplates(Revision3)(N2080=06-0150),第6页:Althoughnotstrictlynecessary(wecanimplementcountwithoutthisfeature),checkingthelengthofaparameterpacki

c++ - 如何中断等待的 C++0x 线程?

我正在考虑在我的应用程序中使用C++0x线程而不是Boost线程。但是,我不确定如何使用标准C++0x线程重新实现我所拥有的,因为它们似乎没有interrupt()方法。我当前的设置是:管理工作的主线程;执行主人命令的几个工作线程。Workers在至少两个不同的条件变量上调用wait()。Master有一个“超时”状态:在这种情况下,它告诉所有worker停止并给出他们当时得到的任何结果。使用Boost线程主控器只需在线程组上使用interrupt_all(),这会导致worker停止等待。如果他们此刻不在等待,master还会设置一个bool标记,worker会定期检查该标记。但是,

c++ - 模板、函数指针和 C++0x

我为了解C++0x的某些特性而进行的个人实验之一:我正在尝试将函数指针传递给模板函数以执行。最终执行应该发生在不同的线程中。但是对于所有不同类型的函数,我无法使模板正常工作。#includeintfoo(void){return2;}classbar{public:intoperator()(void){return4;};intsomething(inta){returna;};};templateintfunc(C&&c){//typedeftypenamestd::result_of::typeresult_type;typedeftypenamestd::conditional

c++ - 指针数组,如 (*(volatile unsigned long *)0x40004000)

我很难弄清楚如何解决以下问题。我在一个内存很少的嵌入式系统上,想尽量减少内存使用。指针总是让我感到困惑,而且将永远如此。我有一大堆寄存器地址的定义:#defineGPIO_PORTA_BASE(*((volatileunsignedlong*)0x40004000))#defineGPIO_PORTB_BASE(*((volatileunsignedlong*)0x40005000))//etc..这些寄存器可直接访问。例如:GPIO_PORT_BASE&=0x01;我需要的是一个包含上述寄存器的数组,以便我可以轻松地将它们映射到索引。例如:not_sure_what_to_decla

C++0x 原子模板实现

我知道在Intel的TBB中存在类似的模板,除此之外我在google或Boost库中找不到任何实现。 最佳答案 您可以在boost中找到有关此功能实现的讨论:http://lists.boost.org/Archives/boost/2008/11/144803.php>CantheN2427-C++AtomicTypesandOperationsbeimplemented>withoutthehelpofthecompiler?No.Theydon'tneedtobeintrinsicsifyoucanwriteinlineass

C++0x 性能改进

允许编写更高效的C++代码的C++0x改进之一是unique_ptr智能指针(太糟糕了,它不允许像操作一样通过memmove()移动:该提案没有纳入草稿)。即将发布的标准还有哪些其他性能改进?以下面的代码为例:vectorv(10,"astring");stringconcat=accumulate(v.begin(),v.end(),string(""));代码将连接vectorv中包含的所有字符串。这段简洁的代码的问题在于accumulate()复制了一些东西,并且没有使用引用。每次调用plus运算符时,string()都会重新分配。因此,与优化良好的类比C代码相比,该代码的性能较