问题标签 [stdasync]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - std::future 作为函数 C++ 的参数
考虑以下代码
它说“这是一个已删除的功能”。这是为什么?此外,我需要将生成的相同承诺结果传递(共享)std::async
给多个用户。这意味着当有人调用 get() 函数时,我需要传递相同的结果(std::async
如果它已经生成,我不需要重新生成结果)并且我需要具有的阻塞机制std::future::get
。
c++ - 使用 x64 时 C++ 异步返回值不同
以下代码使用 VC2013 中的 Debug\Win32 和 Debug\ x64设置进行编译,但是当我使用 Debug\ x64时,我得到以下IntelliSense 错误:
错误是指 Header.cpp 中的此函数:
为什么 std::async 在使用 x64 时返回不同的东西?
返回值win32:
返回值 x64:
我怎样才能为 x64 解决这个问题?
我的代码:
头文件.h
头文件.cpp
源.cpp
编辑: 我不想使用自动,因为自动在其他情况下不起作用(例如创建期货向量然后推回期货)
这个错误不是编译器错误,代码编译和执行完美==>我不能发布编译器错误,因为没有编译器错误。我只想摆脱 VC IntelliSense 错误
使用 std::move() 并不能解决问题,我仍然得到一个 IntelliSense 错误:(代码在使用和不使用 std::move 的情况下都能完美编译和执行)
android - std::async 和 std::future 在 iOS 和 Android 平台上是否可以很好地扩展?
我有一个用于游戏引擎的 2D 粒子系统,我想在其中将粒子的更新循环与主线程分离。我正在使用一个用 boost::asio 实现的线程池,并将所有任务分成几个阶段,然后在主线程上组合结果。这对我来说效果很好,并保证了我允许池的总线程数(由独立触发自己任务的所有粒子发射器共享)。
我已经阅读了很多讨论 std::async 和 std::future 的文章。这在 Windows 或 linux 类型的系统上似乎是完全合理的,其中线程创建由操作系统很好地管理并且内存是丰富的。但似乎很少有人关注在移动平台上讨论这类事情,因为在这种情况下,线程创建可能很昂贵。因为我不确定在这些平台上可能会创建多少线程,所以在我不知道在给定时间可能有多少异步调用(如果每个都创建自己的)的上下文中,似乎很难依赖 std::async线)。
我想听听具有多线程 C++ 移动开发经验的个人的意见。我的问题总结是这样的:
如果我创建 20 个粒子效果,每个都有 4 个并发异步任务,这会导致 100 个线程每个占用 0.5 mb 的内存吗?还是 async 对线程创建和任务共享的智能化有一些神奇的支持?
或者,异步是否会使主线程陷入困境(如果没有明确地使用线程创建规则)有效地滞后于我的游戏玩法以获得相对低优先级的粒子效果?
如果是这样,什么上下文在移动设备上实际上是有用的,因为看起来线程创建是您希望在这些设备上更明确一点的东西。
c++ - std::async、std::function 对象和带有“可调用”参数的模板
问题1。为什么 (*) 处的调用没有std::move
?
问题2。因为我不明白 (*) 处的代码是如何工作的,所以出现了第二个问题。我是否必须确保每个变量都存在bound_f1
,bound_f2
直到 async_g() 创建的相应线程终止?
问题3。为什么取消注释(**)标记的行会导致编译错误?
c++ - 此代码是否正确同步?
我想知道这段代码是否正常:
我认为m_a
应该受到同步机制的保护,但我的同事说没有必要。
编辑:澄清我的问题:我担心来自构造函数的 STORE 操作Foo()
发生在另一个线程的 LOAD 操作之后。我看不出是什么机制阻止编译器按此顺序执行这些指令。
编辑:我相信一个热心的编译器可以决定内联构造函数,并在 CALL 操作之后延迟 STORE 操作到std::async
. 在这种情况下,第二个线程可以m_a
在它被提交到内存之前访问。
c++ - 是否需要 std::launch::async 策略?
以下有什么区别:
和
在这种情况下使用 pilicy std::launch::async有什么区别?无论如何,第一个选项不会异步启动该功能吗?
c++ - 如何正确删除指向回调函数的指针。
- 我有一个 MainProgram.exe 调用 MyDll.dll 并使用 curl 在回调函数中接收数据。
- 我将 curl 包装在一个名为 CurlGetData 的函数中,该函数创建一个 curl 实例并执行 curl_easy_perform。
这是我的代码:
GetDataAsync 函数是从我的主程序调用的,它基本上调用 curl_easy_perform 并使用 m_curlHandler 作为其回调函数,该回调函数回调到 CurlDataCallback。
这一切都很好,但是每当我的主程序退出时,它都会调用 MyDll::StopDataAsync 来停止 curl 数据回调,然后调用 MyDll 的析构函数来清理 m_curlHandler。
但我发现此时 curl 尚未完成此回调,并且程序崩溃,因为 m_curlHandler 已被删除,但新异步线程中的 curl 回调仍在使用它。
有时它可以正常关闭,但有时由于 curlcallback 试图访问已被析构函数删除的指针而崩溃。
我怎样才能最好地清理 m_curlHandler?我想避免等待超时,因为这会影响我的主程序的性能。
c++ - 异步函数产生不一致的结果
我有一个异步运行的函数。不幸的是,它有时只会吐出正确的答案。futures[i].get()
每次我运行代码时,所代表的值都会发生变化。我是多线程的新手。
c++ - C++11 std::async 回调
我想实现一个查询数据库并异步执行查询的对象。
假设我们有一个要查询的对象 A 使用对象 B。A 调用 B 的 executeQuery 方法并开始做其他事情。B 的 ExecuteQuery 方法对于 quini A 是异步的、非阻塞的。当查询的结果准备好时,我希望它在 B 中通过回调通知给 A,以便 A 只有在准备好时才能去读取结果。
在 C++ 11 中实现这种机制的最佳方法是什么?
我用 std :: async 尝试了它,而是在 std :: future 中读取结果我想在我的 std :: future 已经包含结果时收到回调,从而避免我的调用成为阻塞器。
谢谢你
c++ - 异步使用线程池?
我是 C++ 新手,我尝试使用带有 launch::async 的 std::async 来生成新线程来处理传入的 UDP 数据包。对于特定端口上的每个新请求,异步都会产生一个新线程来处理它。
在负载下,我发现 udp 数据包正在到达我,但异步生成线程并开始处理信息需要 10 多秒。我想知道是否有一个底层线程池,这就是异步被阻塞并等待的原因。如果是,我怎样才能增加这个线程池的大小?