草庐IT

target-async

全部标签

c++ - 从 std::function::target<>() 获取的函数指针和普通函数指针有什么区别?

以下代码是从APUE复制过来的signal实现,稍作修改namespace{usingsignal_handler=void(*)(int);signal_handlersignal(sigset_tsig,signal_handler);}Signal::signal_handlerSignal::signal(sigset_tsig,void(*handler)(int)){structsigactionnewAction,oldAction;sigemptyset(&newAction.sa_mask);newAction.sa_flags=0;newAction.sa_hand

c++ - 正确使用 std::function::target

任何人都可以帮我实现下面的函数test,以便它接受任何Callable和std::function并返回true如果std::function的目标是Callable?我一直在尝试各种方法,但没有一个一直有效,我什至无法弄清楚为什么它们适用于它们确实有效的案例。#include#include#includeintfoo(int){return0;}intfaz(int){return0;}struct{intoperator()(int){return0;}}bar,baz;templatebooltest(F1&&f1,std::functionf2){//returnf2.tem

c++ - std::async 使用绑定(bind)到 lambda 的右值引用

我正在尝试使用std::bind将右值引用绑定(bind)到lambda,但是当我将其放入std::async调用时出现问题:(source)autolambda=[](std::string&&message){std::cout这会发出一个编译器错误,我不确定如何解释:error:notypenamed'type'in'classstd::result_of(std::basic_string)>&()>'这是怎么回事?有趣的是,稍作修改就可以按预期编译和工作。如果我将std::string{"helloworld"}更改为c字符串文字,一切正常:(source)autolambd

c++ - std::async 使用同一个线程,我的代码没有实现并行。

我在MacOSXcode4.3.2上使用C++11std::async使用同一个线程,我的代码没有实现并行。在下面的示例代码中,我想创建10个新线程。在每个线程中,我想计算输入变量的平方根并将结果设置为promise。在main函数中,我想显示从线程计算的结果。我正在使用策略launch::async调用std::async,所以我希望它创建一个新线程(10次)。#include#include#include#include#include#includeusingnamespacestd;mutexiomutex;voidfoo(inti,promise&&prms){this_t

c++ - boost 等效于 std::async()

如果不直接使用boost::thread和boost::bind,有没有办法实现以下代码的等价物?std::stringfunc(){std::stringstr("Hellofromasynctask!");returnstr;}intmain(){autoftr=std::async(&func);std::cout具体来说,这部分:autoftr=std::async(&func);? 最佳答案 当然。只需制作async(std::function)返回调用func()的future第一次等待的那一刻。您不会获得任何异步性,但

c++ - GCC 对 std::async(std::launch::async) 的行为与 Clang 的行为

有没有人有使用相当新的std::async的经验?我们目前正在实现一个并行文件解析器,它读取一个文件block并将该block传递给一个异步函数。以这种方式使用Clang(v3.0)与默认的std::async策略(依赖于实现)一起工作得很好。在双核机器上,它最多可触发4个线程,效果非常好。但是对于GCC(v4.7),文件读取线程不会产生任何新线程,从而使程序最终完全按顺序执行。使用std::launch::async,两个版本几乎都在做同样的事情(应该是这样)。有谁知道GCC的c++11线程功能的当前状态?或者这可能是我们实现中的错误?短代码:while(readNewChunk()

c++ - boost::asio 中 async_read() 中的 EOF

当async_read_some()返回EOF异常时,是服务器停止发送数据还是连接已关闭。我有这种困惑,因为我找不到一种方法来知道客户端是否已从服务器接收到所有数据。 最佳答案 表示连接已经关闭。虽然记录了elswhere它仍然适用:Anerrorcodeofboost::asio::error::eofindicatesthattheconnectionwasclosedbythepeer.如果客户端需要知道已经从服务器接收到所有数据,那么可以考虑在通信协议(protocol)中支持分帧。Boost.Asio提供更高级别的操作来帮

c++11 std::async 在 mingw 中不起作用

从HerbSutter的presentation运行这段代码.这在gcc4.6.3下的linux中工作正常。我在想mingw不支持future.h,但是这个错误真的很难理解!#include#include#include#include#includeusingnamespacestd;stringflip(strings){reverse(begin(s),end(s));returns;}intmain(){vector>v;v.push_back(async([]{returnflip(",olleH");}));v.push_back(async([]{returnflip(

c++ - 用自己的版本替换 std::async 但 std::promise 应该住在哪里?

我使用的是vc2011,结果发现std::async(std::launch::async,...)有点问题(有时它不会生成新线程并并行运行它们,而是重用线程并一个接一个地运行任务)。当我进行昂贵的网络调用时,这太慢了。所以我想我会编写自己的异步函数。我被卡住了,std::promise应该放在哪里?在1)线程函数、2)异步函数或3)调用函数中。代码:#include#include#include#include#includestd::stringthFun(){throwstd::exception("bang!");return"val";}std::futuremyasync

c++ - msvcprtd.lib(MSVCP100D.dll): fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'

我创建了一个vs2010win32程序(操作系统:Win8-64bit)然后,我尝试通过这样做将这个win32程序转换为x64:ConfigurationManager->newsolutionplatform(selectx64)->copysettingsfromwin32vs2010在之前的win32程序的基础上新建了一个x64程序。但是,当我尝试编译和运行x64程序时,出现一个错误:msvcprtd.lib(MSVCP100D.dll):fatalerrorLNK1112:模块机器类型“X86”与目标机器类型“x64”冲突通过重命名msvcprtd.lib的win32版本和x6