gpt4 book ai didi

c++ - boost::bind、boost::asio、boost::thread 和类

转载 作者:行者123 更新时间:2023-11-30 02:12:50 35 4
gpt4 key购买 nike

sau_timer::sau_timer(int secs, timerparam f) : strnd(io), 
t(io, boost::posix_time::seconds(secs))
{
assert(secs > 0);
this->f = f;

//t.async_wait(boost::bind(&sau_timer::exec, this, _1));
t.async_wait(strnd.wrap(boost::bind(&sau_timer::exec, this)));
boost::thread thrd(&io,this);
io.run();
//thrd(&sau_timer::start_timer);
}

这是我在类“sau_timer”的构造函数中的代码(它有望在单独的线程中运行一个计时器,然后调用另一个函数)。

不幸的是,当我尝试编译 atm 时,出现以下错误:

1>c:\program files\boost\boost_1_39\boost\bind\bind.hpp(246) : error C2064: term does not evaluate to a function takeing 1 arguments

还有一大堆警告。我究竟做错了什么?我已经尝试了所有我能想到的,谢谢。

最佳答案

解释在错误信息的末尾:

c:\users\ben\documents\visual studio 2008\projects\sauria\sauria\sau_timer.cpp(11) :
see reference to function template instantiation
'boost::thread::thread<boost::asio::io_service*,sau_timer*>(F,A1)' being compiled

生成boost::thread 的ctor 时发生错误。它需要一个函数对象(带有 operator()() 的东西),然后你传递给它(我猜)是一个 io::service。如果你想要的是调用 io_service::run 的线程,写:

boost::thread thrd(boost::bind(&io_service::run, &io));

如果您使用相对较新版本的 Boost,我相信线程的 ctor 有一个方便的重载来处理 bind(),允许简单地写:

boost::thread thrd(&io_service::run, &io);

关于c++ - boost::bind、boost::asio、boost::thread 和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1336895/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com