草庐IT

syscall_thread_switch

全部标签

c++ - 为什么我不能在 switch-case block 中实例化对象

我的代码有3个类n_hexa、n_octa、n_bin。代码在这里switch(choice){case1:cin>>n;n_hexanx(n);break;case2:cin>>n;n_octano(n);break;case3:cin>>n;n_binnb(n);break;}在编译时,它会为n_octa行给出一条消息“crossesinitialisationofn_hexa” 最佳答案 如果您想在case中放置临时对象,则需要适本地确定它们的范围。switch(choice){case1:{cin>>n;n_hexanx(n

c++ - std::thread::id 的要求。可以雾化吗?

标准说:“thread::id类型的对象为不代表执行线程的所有线程对象提供了一个不同的值”。这是关于operator==的单一/不同值吗?,还是实际的按位单值/不同值?问题原因:MSVC2012的std::thread::id::id()在它的一个字段中留下垃圾,它破坏了在std::atomic上进行比较交换的代码。(因为后者取决于按位比较)。是std::atomic首先是法律结构?编辑:供引用,代码如下:while(!worker_id.compare_exchange_weak(no_id=thread_id_type(),self_id))sleep();

c++ - 可连接的 std::thread 不自动连接的原因是什么?

有时,如果可连接的std::thread能够在其析构函数上执行thread::join()会很有用。请参阅下面的示例。示例1(错误):对象std::thread在抛出异常后被销毁。一旦流退出作用域,析构函数就会在连接发生之前被调用。它使STL显示“中止”的错误消息。intmain(intargc,constchar*argv[]){try{threadt([](){this_thread::sleep_for(chrono::seconds(1));cout例2(正确方式):对象t在我的try-catchblock之前创建,并且join()放在try和catchblock上。所以它保证

C++:switch 语句中的结构成员

我正在用C++编写一个微处理器仿真器,我的目标之一是使其代码易于阅读。为了实现操作码,我有一个结构,我用它来表示单个处理器指令,它包含操作码和程序计数器前进的距离。想法是将每条指令的相关信息分组。structinstruction{constintopcode;//instructionopcodeconstintop_size;//howfartoadvanceProgramCounter};constinstructionHALT{0x76,1};constinstructionNOP{0x00,1};我最初的计划是使用此结构定义所有操作码,因为我的印象是const比使用#defi

c++ - std::threads 是在用户空间还是内核空间中管理的?

正如我在标题中所写,我想知道c++标准线程是在用户空间还是内核空间中进行管理。谢谢。 最佳答案 正如几乎总是发生的那样,该标准不强制执行任何特定的实现,它只要求所展示的行为符合其规则。因此,特定的实现是可以自由选择的;另一方面,可能许多实现将基于boost.thread(std::thread提案基于此),因此我们可以通过查看它来获得灵感。该库在POSIX上使用pthreads,在Win32上使用Windows线程。Win32线程绝对是内核线程,但是pthreads它们自己只是另一个接口(interface),它可以在用户空间和内核

c++ - 错误 C2280 : 'std::thread::thread(const std::thread &)' : attempting to reference a deleted function

我在尝试创建使用C++11标准线程的VC++静态库时遇到问题。我目前有两个类,我可以在我的起始类(最后声明的)上声明并稍后定义一个线程。在这个阶段,代码只是一个套接字监听器,然后创建另一个类的对象来处理每个接受的客户端。这些子对象应该创建并行数据捕获、编码和传输所需的线程。问题是:如果我在我的其他类上声明了一个std::thread,即使我在我的起始类上所做的完全一样,无论如何,我在构建errorC2280时遇到这个错误:'std::thread::thread(conststd::thread&)':试图引用已删除的函数[...]\vc\include\functional11241

独立 std::threads 的 C++ std::vector

我正在构建一个实时软件,其中我在main()上有一个主无限循环和用于读取和处理数据的线程。其中一个问题是保持运行线程的std::vector向它们发送信号并监视执行。所以我把这段代码放在一起:#include#include#include#include#includenamespacereaderThread{voidstart(intid){while(1){std::coutreaderThreads;for(int&reader:readers){std::threadth(readerThread::start,reader);readerThreads.push_back

c++ - 具有大量案例的 Switch 语句

如果switch有超过5000个case会发生什么。有什么缺点,我们如何才能用更快的东西代替它?注意:我不希望使用数组来存储案例,因为它是一样的。 最佳答案 除了switch/case语句之外,没有特别的理由认为您需要任何其他东西(事实上,我非常希望它没有帮助)。编译器应该创建高效的调度代码,这可能涉及静态[稀疏]表和直接索引、二进制分支等的某种组合;它深入了解案例的静态值并且应该做得很好(每次更改案例时都会即时重新调整它,而新值不适合手工制作的方法-例如截然不同的值当你有一个非常紧凑的数组查找时-可能需要重新编写代码或默默地导致内

c++ - 为什么不能在 switch 语句中声明变量?

我想了解更多关于“Whycan’tvariablesbedeclaredinaswitchstatement?”的信息我读了这篇文章,但我没有完全理解。您可以只在switch内声明变量,但要对变量进行decalre和初始化,或者声明类的对象,它会产生编译时间错误。请解释一下.... 最佳答案 本质上是因为如果未命中包含变量初始化的标签,则会跳过变量的初始化。这会很糟糕,因为当且仅当初始化代码已运行时,编译器将不得不发出会破坏所述变量的代码。例如:classA{//hassomenon-trivialconstructoranddes

c++ - 如何避免长 switch 语句? C++

我正在为我的类(class)编写一本“词典”。我有一个名为NumOfWordsInFile[]的int数组,其中NumOfWordsInFile[0]对应于A.txt和NumOfWordsInFile[25]中的单词数对应Z.txt就像现在一样,我有一个巨大的开关可用于26种不同的字母条件。我有一个名为AddWord(stringword)的函数。AddWord获取传递给它的单词的第一个字母,并将其插入到适当的.txt文件中。现在问题来了。每次向A.txt添加单词时,我都必须将NumOfWordsInFile[0]加1。我能想到的唯一方法就是使用这些巨大的开关。我还有一个deleteW