我有客户类:
class Client
{
std::vector<char> buffer;
//actually these are asio socket and waitable_timer but that's beside the point
Socket socket;
Timer timer;
public:
void send_request(std::string req); //sends request in new thread and immediately returns
};
如果我没记错的话,buffer、socket 和 timer 在线程之间是共享的。现在我希望 socket 和 buffer 在线程之间共享,以便它们共享连接并读入相同的缓冲区。但我希望每个线程都有自己的计时器。有没有比在 send_request(std::string) 函数中本地创建计时器然后通过参数传递给其他函数(由 send_request 调用的函数)更好的方法呢? ?请注意,我可以在每个函数中创建新的计时器,然后在最后销毁它(因为每个函数都设置了截止日期,读取数据并调用另一个函数,该函数设置了独立于前一个的新截止日期)但是使用 asio 我无法让它运行几个小时后,我也没有看到它以这种方式使用,所以认为这不是一种选择。
答案 0 :(得分:1)
您可以使用 std::mutex
。
<mutex_obj>.lock()
锁定对象,<mutex_obj>.unlock
解锁对象。
答案 1 :(得分:0)
您可以拥有 Client
或 Connection
类的单个实例以及 socket
和 buffer
字段,以及 Session
类的多个实例(带有timer
字段)链接到 Connection
实例。
顺便说一句,我不确定您如何在多个线程之间有意义地共享单个套接字和缓冲区。