boost::function对象与函数指针比较相似,优点在于它拥有更大的弹性,目标既可以是普通函数、函数对象或者类的成员函数,而且还可绑定参数,给回调提供了极大的方便。但是C语言的函数是不支持boost::function对象的,当需要函数指针的C函数填写上boost::function对象时候,就出现下面的error
cannot convert 'boost::function<void*(void*)>'
to 'void* (*)(void*)'
其实我们可以在中间加上一个proxy的函数来解决
如下,pthread_create需要的为函数指针,而我们需要绑定一些参数,我们就可以创建一个proxy代理函数,代理函数复合pthread_create所需函数的要求,但在代理函数里边执行我们的boost::function对象表示的函数。
#include <iostream>
#include <string>
#include <thread>
#include <boost/format.hpp>
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#define LOG(content) cout<<content<<endl;
using namespace std;
void* realThreadFunction( int first, int second, void *agrv) {
//Do things with first and second
string content = (boost:: format( "%1% + %2% = %3%") % first % second
% (first + second)).str();
LOG(content);
return NULL;
}
void* proxyThreadFunction( void * agrv) {
boost::function< void*(void *)>* threadFunction =
reinterpret_cast<boost::function <void*(void *)> *>(agrv);
(*threadFunction)(NULL);
return NULL;
}
int main() {
int a = 10, b = 20;
pthread_t threadId;
boost::function< void*(void *)> threadFunction = boost::bind(
realThreadFunction, a, b, _1);
if (0 == pthread_create(&threadId, NULL, proxyThreadFunction, &threadFunction)) {
boost::this_thread::sleep(boost::posix_time:: seconds(5));
pthread_join(threadId, NULL);
} else {
LOG( "create thread fail.")
}
return 0;
}
分享到:
相关推荐
通过boost::asio::serialport类实现串口通信的例子
首先看看boost::thread的构造函数吧,boost::thread有两个构造函数: (1)thread():构造一个表示...该构造函数传入的是函数对象而并非是函数指针,这样一个具有一般函数特性的类也能作为参数传入,在下面有例子。
详细讲述了boost::thread的用法
此压缩包包含12个项目,每个项目都着重讲解Boost::Serialization一个方面的使用技巧,有详细的代码介绍具体使用方法。
boost::lexical_cast用法示例,包含数值转字串,字串转数值以及相应的异常处理代码
boost::asio::serial下6个工程演示多种串口读取写入方式方法,包含simple,with_timeout,async,callback,qt_integration,stream 等多个工程演示多种方式读取,写入串口,char,string ,buffer[]等多种数据格式。
boost::asio完成了通讯模块的编写,界面用MFC简单做了一下。 局域网的测试结果: 传输速度在6-7m/s 并发到500,服务器CPU和网络应用均出现使用99%的情况出现硬件瓶颈,新连接无法建立(测试服务器比较差,CPU:...
相信不少人听过 boost 委员会提过 boost 里的对象池设计存在缺陷。我花了一些时间研究它的实现,发现其在效率上确实存在严重问题。这里给出一套解决方案。在效率上有了较大提高。可以完全替换你项目里的 object_pool...
深入实践Boost:Boost程序库开发的94个秘笈
在C++编程领域,有一段备受推崇的代码——“boost::asio”,它被认为是世界上最强大的C++代码之一。它是一个跨平台的网络编程库,提供了异步I/O、TCP/UDP套接字、定时器、信号处理等功能。本文将为您详细介绍boost::...
本文实例讲述了C++之boost::array的用法,分享给大家供大家参考。具体如下: 代码如下:#include #include #include <boost> #include using namespace std; int main() { boost::array<int> ...
《深入实践Boost:Boost程序库开发的94个秘笈》一书的英文名为“Boost C++ Application Development Cookbook”,该书从应用角度讲解了实际开发中94个问题如何应用boost来解决,每个都讲了方法、原理及引申的内容...
算是一个消息处理框架吧,用于说函数对象function与bind的基本用法; 比较适合入门boost的function与bind的基本用法
全网只有我这里有中文版的《深入实践Boost:Boost程序库开发的94个秘笈》,只有这里有哦,快来下载吧!消灭正版,从我做起!如果需要本书源码,可以搜索下CSDN里面,有人上传过英文版的书和源码,
主要介绍了C++ boost::asio编程-同步TCP详解及实例代码的相关资料,需要的朋友可以参考下
任何写入boost::multi_array接口的 C++ 算法都可以轻松地重新编译以使用 Numpy 数组。 已知缺点: 由于 boost::multi_array 的设计,数组的数据类型和维数在编译时是固定的(尽管这在实践中通常不是一个重要的限制...
利用boost::asio 搭建一个C/S架构的服务端模型。 该服务端支持客户端长连接。 链接到其他服务器使用了链接池。