草庐IT

dispatch_main_queue_callback

全部标签

c++ - std::queue<T, list<T>>::size() 在 O(n) 中很慢?

我在使用队列的代码中遇到了意外的性能行为。我意识到当队列中有更多元素时性能会下降。事实证明,使用size()方法是原因。这是一些显示问题的代码:#include#include#include#include"Stopwatch.h"usingnamespacestd;structBigStruct{intx[100];};intmain(){CStopwatchqueueTestSw;typedefBigStructQueueElementType;typedefstd::queue>QueueType;//typedefstd::queueQueueType;//nosurpris

c++ - C++中 "main"线程的id

在C++中有没有办法获取“主”程序线程的ID?我看到std::this_thread::get_id()获取当前正在执行的线程的ID,但我需要main的ID,即原始程序线程。我没有看到任何功能来获取它。原因是我有一些非线程安全的内部函数,它们只能在应用程序的原始线程上调用,所以为了安全我想这样做:-assert(std::this_thread::get_id()==std::main_thread::get_id());但是当然没有执行此操作的功能,而且我看不到任何获取该信息的方法。 最佳答案 您可以在this_thread仍然是

c++ - 独立于模板参数位置的专用模板分派(dispatch)

我遇到过需要一个模板函数的问题,只要它的模板参数相同且与位置无关,它就会具有相同的输出。假设总是有两个参数。我有一个函数:templateintfunc();我想要func()和func()调用相同的代码。我想到了一个我想避免使用的宏,但我需要在两种类型相同时不要重复代码。所以一个宏,例如:#defineDEF_TEMPL_IMPL(lhs,rhs,ret)\template\autofunc(){returnret;}\template\autofunc(){returnfunc();}编译失败因为DEF_TEMPL_IMPL(float,float,3)会导致重新定义func我认为

c++ - 在 main() 消失之前初始化的值

无法理解奇怪的程序行为-希望有人能解释一下。虚拟.h:#ifndefDUMMY_H#defineDUMMY_H#includeclassDummy{intval;public:intInit(intnew_val){returnval=new_val;}intGet(){returnval;}Dummy():val(-1){std::cout标题.h:#include"dummy.h"externDummydummy;虚拟.cpp:#include"dummy.h"Dummydummy;主要.cpp:#include#include"header.h"intres1=dummy.Ini

c++ - 为什么 std::queue 不是线程安全的?

主题说明了这一点。我不明白为什么std::queue(或一般来说:任何队列)本质上不是线程安全的,当没有像其他数据结构那样涉及迭代器时。根据一般规律至少有一个线程正在写入...另一个线程正在读取共享资源我应该在以下示例代码中遇到冲突:#include"stdafx.h"#include#include#includestructresponse{staticint&getCount(){staticinttheCount=0;returntheCount;}intid;};std::queuequeue;//generate100responseobjectsandpushthemin

c++ - 可以单独编译任何 .c 文件(也就是说,没有 main?)

我目前有一个“类库”.c文件(如下所示)。我对此有2个问题:如果我想看看它自己是否编译良好,我该怎么做?如果我尝试对它进行gcc,它总是会给出“nomain”错误,这是有道理的,但会引发一个问题,即知道给定的.c文件是否可以“隔离”编译。我是否可以安全地得出结论,如果编译器引发的唯一错误是“nomain”错误,那么我的文件没有问题?在这里单独编译.c文件的一个例子是确定哪些包含过多。在这样一个简单的文件中是否有必要用它的方法/结构声明定义一个header,然后在这样一个很小的​​.c文件中包含代码实现?#ifndefSEMAFOROS#defineSEMAFOROS#include#i

c++ - CRT 如何调用 main ,具有不同的参数

我们可以用多种方式编写主函数,intmain()intmain(intargc,char*argv[])intmain(intargc,char*argv[],char*environment)运行时CRT函数如何知道应该调用哪个main。请注意,我不是在询问是否支持Unicode。 最佳答案 接受的答案不正确,CRT中没有特殊代码来识别main()声明的类型。它的工作是因为cdecl调用约定。它指定参数从右到左压入堆栈,调用者在调用后清理堆栈。因此CRT只是将所有参数传递给main()并在main()返回时再次弹出它们。您唯一需要

c++ - 在 C 和 C++ 中没有定义的函数 main

为什么这段代码在C中编译成功,而在C++中却报错?intmain;它在托管环境中是否符合标准?你能引用标准吗?我已经用gcc测试过了。 最佳答案 WhythiscodecompilesuccessfulinCandwillgiveyouanerrorinC++?由于C++名称修改。基本上,在所有实际实现中,链接器寻找名为main的symbol(或其变体,我在Apple平台上看到过_main)-在C中,它可以是main()函数或名为的外部存储变量main-关键是通常C实现(编译器、工具链)在链接器级别不区分变量和函数,这就是为什么提供

c++ - Vulkan 中的 Queue 族实际上是什么?

我目前正在学习vulkan,现在我只是拆开每个命令并检查结构以尝试理解它们的含义。现在我正在分析QueueFamilies,为此我有以下代码:vectorqueue_families=device.getQueueFamilyProperties();for(auto&q_family:queue_families){cout这会产生这个输出:Queuenumber:16Queueflags:{Graphics|Compute|Transfer|SparseBinding}Queuenumber:1Queueflags:{Transfer}Queuenumber:8Queueflags

c++ - 为什么 main() 必须返回一个 int?

这个问题在这里已经有了答案:Whatshouldmain()returninCandC++?(19个回答)关闭9年前。在大多数情况下,intmain()不会返回任何东西,它甚至不必返回任何东西,因为没有return不会给出错误。那么为什么main必须返回一个int呢?为什么voidmain不可能?编辑:我的意思是,如果通常没有return,为什么intmain()是标准?