gpt4 book ai didi

c++ - 将特定对象的方法函数发送到线程

转载 作者:行者123 更新时间:2023-11-30 03:45:01 24 4
gpt4 key购买 nike

到目前为止,我在线程中使用方法函数的唯一方法是:

std::thread t1(&mymethod::myfunction, param1, param2, ...);

如果我理解正确的话,上面的例子调用了通用函数,而不是从特定对象调用,这意味着该函数不会根据对象的当前状态工作。

那么,如何使用特定对象调用函数?

这样就会出现错误C3867:

myclass myobj(param);
std:: thread t1(myobj.myfunction, param1, param2, ...);

这是我具体工作中发生的事情:我想创建一个具有读取和写入文本文件功能的类,使用线程(RW 锁)我有以下类(class):

class readersWriters{
private:
/*... here are some mutexes to implement readers writers lock... doesn't matter*/
string _fileName;

public:
readersWriters(string fileName); //constructor
/*...*/
void readLine(int lineNumber); //lineNumber - line number to read
void WriteLine(int lineNumber, string newLine);//lineNumber - line number to write
}

所以在主函数中,我创建了一个类的对象...

readersWriters one("sample.txt");

如果我像示例中那样创建调用该函数的线程,该函数如何知道从哪个文本读取和写入?在这里我没有成功:

//thread that reads from "sample.txt" through object "one"
//thread that writes through object "one"
//etc.

我该怎么做才能让线程从对象“one”读取和写入 sample.txt?谢谢

最佳答案

没有比这更简单的了。只需将指向对象的指针作为第二个参数传递即可。像这样:

std::thread t1(&mymethod::myfunction, &myobj, param1, param2, ...);

您还可以通过复制或将其包装在 std::ref 中来传递对象,这与通过地址传递实际上是一样的。

请记住,当通过指针或 std::ref 传递时,您承担了确保对象在从衍生线程访问时不会被破坏的责任。

关于c++ - 将特定对象的方法函数发送到线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35091258/

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