【问题标题】:C++ creating thread inside a class gives c2064C++ 在类中创建线程给出 c2064
【发布时间】:2014-09-17 06:27:50
【问题描述】:

最近我开始使用 boost::thread(也尝试使用 STL - 线程)来建立聊天。 我在我的“服务器站”创建了一个具有

的类
  1. 从 main.cpp 获取调用的 void 函数启动服务器监听 + 绑定
  2. 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


【解决方案1】:

在下面一行:

boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener);

您传递了成员函数指针,但缺少应用该指针的对象。你可能想要这样的东西:

boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener, this);

此外,您不需要像在 Java 中那样在同一行中两次拼写类型,因此:

boost::thread clients_listener(&ServerSocket::clientsListener, this);

足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多