gpt4 book ai didi

c++ - 如何在类函数中创建线程?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:09 25 4
gpt4 key购买 nike

我是 C++ 的新手。

我有一个类,我想在类的函数中创建一个线程。该线程(函数)也将调用和访问类函数和变量。一开始我尝试使用 Pthread,但只能在类之外工作,如果我想访问类函数/变量,我会遇到超出范围的错误。我看了一下 Boost/thread,但这是不可取的,因为我不想将任何其他库添加到我的文件中(出于其他原因)。

我做了一些研究,但找不到任何有用的答案。请举一些例子来指导我。非常感谢!

尝试使用pthread(但我不知道如何处理我上面所说的情况):

#include <pthread.h>

void* print(void* data)
{
std::cout << *((std::string*)data) << "\n";
return NULL; // We could return data here if we wanted to
}

int main()
{
std::string message = "Hello, pthreads!";
pthread_t threadHandle;
pthread_create(&threadHandle, NULL, &print, &message);
// Wait for the thread to finish, then exit
pthread_join(threadHandle, NULL);
return 0;
}

最佳答案

您可以将静态成员函数传递给 pthread,并将对象的实例作为其参数。成语是这样的:

class Parallel
{
private:
pthread_t thread;

static void * staticEntryPoint(void * c);
void entryPoint();

public:
void start();
};

void Parallel::start()
{
pthread_create(&thread, NULL, Parallel::staticEntryPoint, this);
}

void * Parallel::staticEntryPoint(void * c)
{
((Parallel *) c)->entryPoint();
return NULL;
}

void Parallel::entryPoint()
{
// thread body
}

这是一个 pthread 示例。您可能可以毫不费力地调整它以使用 std::thread。

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

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