【发布时间】:2014-09-17 06:27:50
【问题描述】:
最近我开始使用 boost::thread(也尝试使用 STL - 线程)来建立聊天。 我在我的“服务器站”创建了一个具有
的类- 从 main.cpp 获取调用的 void 函数启动服务器监听 + 绑定
- void 函数,即从我之前所述的函数调用的线程
代码:
this is ServerSocket.cpp file
void ServerSocket::startHosting()
{
Bind();
Listen();
boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener);
}
//This is the thread function
void ServerSocket::clientsListener()
{
..... handling incoming clients sockets , code goes here ....
}
在创建线程部分我添加了“this”,因为我在 stackoverflow 上读到,非静态成员函数必须具有代表类的“this”成员,但是当我添加时我有另一个错误,但这次是 1当没有给出“this”时,值而不是 0
错误 C2064 - 术语不计算为采用 1 个参数的函数
有人知道如何解决这个问题并请告诉我答案吗? 我可以做一个静态函数,但这需要我将该函数中需要的所有其他成员设为静态,我不想这样做
【问题讨论】:
-
boost::thread(boost::bind(&ServerSocket::clientsListener, this));(注意,未经测试,但如果历史教会了我什么...)。不确定您打算如何处理该对象,当您创建它,然后在关闭startHosting()时立即销毁它。 -
效果不佳...
-
你的意思是,你试过这个: boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener, this);它失败了?
-
您是否完全解决了我在该评论最后一句中提到的内容?我猜不是。同样,您立即销毁刚刚创建的
boost::thread对象。而“没用”如何?没有编译?没有 运行 吗?没有像你想要的那样跑?如果这个问题 不是 a duplicate of this question 它尽可能接近。 -
但是线程在操作系统级别,是否需要保存boost::thread对象实例才能运行?
标签: c++ multithreading c++11 boost boost-thread