gpt4 book ai didi

c++ - C++ 类中线程的函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:44 25 4
gpt4 key购买 nike

我在创建应该处理新线程的函数时遇到了问题。当我在类外创建它时,一切正常,但是当我想在类内创建它时,我不知道如何调用它。

我调用这个函数:

pthread_t thread;
pthread_create(&thread, NULL,
sendMessage, (void *) fd);

函数本身看起来像这样:

void * sendMessage(void *threadid) {
string message;
const char * c;
char buffer[200];
int fd = (long) threadid;
while (true) {
cin >> message;

if (message == "exit") {
break;
}

c = message.c_str();
strncpy(buffer, c, sizeof ( buffer));
send(fd, buffer, strlen(buffer), 0);
}
}

但是当我在一个类中声明它时,例如void * Client::sendMessage(void *threadid) ,我什至无法构建它,因为我得到 main.cpp:90:37: error: argument of type 'void* (Client::)(void*)' 与 'void* (*)(void*)' 不匹配 有没有人有任何想法,是什么导致它以及如何解决它?

最佳答案

快速演示 std::thread 如何快速消除您所有的烦恼(通过无缝集成 std::bind 样式调用):

#include <string>
#include <thread>
#include <memory>

void some_function(int i, std::string bla)
{
}

struct some_class
{
void some_member_function(double x) const
{
}
};

int main()
{
std::thread t1(&some_function, 42, "the answer");
std::thread t2;

{
some_class instance;
t2 = std::thread(&some_class::some_member_function,
std::ref(instance),
3.14159);

t2.join(); // need to join before `instance` goes out of scope
}

{
auto managed = std::make_shared<some_class>();
t2 = std::thread([managed]()
{
managed->some_member_function(3.14159);
});

// `managed` lives on
}

if (t1.joinable()) t1.join();
if (t2.joinable()) t2.join();
}

关于c++ - C++ 类中线程的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16702051/

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