我在main函数中创建了两个线程。我想调用" join()"另一个线程中的一个方法。
我怎么称呼?
我正在跑步"连接"和"发件人"作为两个帖子。现在我想打电话给#34;加入()"关于" connect"的方法" void ClientSocket :: sender()"中的线程方法
可以打电话吗?
这些是我作为两个线程运行的代码片段。
int ClientSocket::Connect()
{
isConnected = connect(clientSock, (LPSOCKADDR)&serverInfo,sizeof(serverInfo));
return isConnected;
}
void ClientSocket::sender()
{
if (isConnected == 0)
{
send(clientSock, readBuffer.str().c_str(), strlen((char *)readBuffer.str().c_str()), 0);
}
}
答案 0 :(得分:0)
在所有函数之外定义线程处理程序,即将它们定义为全局。因此,它们可以在任何地方使用,您可以在所有其他功能中调用两者的join
方法。
答案 1 :(得分:0)
这是一个代码示例:
#include <memory>
#include <thread>
#include <iostream>
std::shared_ptr<std::thread> connect_thread, sender_thread;
class ClinetSocket {
public:
int Connect() {
return true;
}
void sender() {
connect_thread->join();
}
};
int main() {
ClinetSocket socket;
connect_thread = std::make_shared<std::thread>([&socket] () {
socket.Connect();
});
sender_thread = std::make_shared<std::thread>([&socket] () {
socket.sender();
});
sender_thread->join();
return 0;
}
但我认为更好的解决方案是使用某种事件:
#include <memory>
#include <thread>
#include <future>
#include <iostream>
class ClinetSocket {
public:
int Connect() {
connected_promice.set_value();
return true;
}
void sender() {
auto connected_future = connected_promice.get_future();
connected_future.wait();
}
private:
std::promise<void> connected_promice;
};
int main() {
ClinetSocket socket;
std::thread connect_thread([&socket] () {
socket.Connect();
});
std::thread sender_thread([&socket] () {
socket.sender();
});
connect_thread.join();
sender_thread.join();
return 0;
}
全球变数是邪恶的。它们表明您在应用程序架构方面存在一些问题。