从无限线程 c++ 中捕获值

Capture value from infinite thread c++

本文关键字:c++ 无限 线程      更新时间:2023-10-16

我创建了一个运行主线程的线程。两个线程都在无限地做某事(都有 while(true( 语句(。主线程 while(true( 在帧中创建游戏逻辑,第二个线程从套接字接收消息。

是否可以在不从第二个线程返回的情况下,从每个帧从第二个线程接收的消息的字符串值获取到主线程中? 在 c# 中,我会使用方法调用程序来做到这一点,但我没有发现任何对 c++ 有用的东西。是否可以在 c++ 中执行?

创建线程的函数:

void ReceiveMessage() {
//std::promise<int> p;
//auto f = p.get_future();
char buf[1024];
string usernput;
int bytesReceived = 0;
std::thread receiveMessage(&FactoredThread::ThreadFunction, *this);
receiveMessage.detach();
//pokusajporuke = f.get();
}

线程函数:

void ThreadFunction() {
bytesReceived = 0;
while (true) {
bytesReceived = recv(sock, buf, 1024, 0);
if (bytesReceived > 0) {
string primljeniString = "";
for (int i = 0; i < sizeof(buf); i++) {
if (buf[i] != 0)
{
primljeniString += buf[i];
}
}
ZeroMemory(buf, 1024);
pokusajporuke = primljeniString;
}
}
}

那么如何获取主线程的"pokusajporuke"字符串呢?

是的,当然。有很多方法可以解决这个问题。 一种方法是使用信号和插槽,就像在Qt中一样。对于纯C++,您可以使用线程安全的 Boost.Signals2。 或者你可以实现模式生产者-消费者。一个线程(生产者(将值放入缓冲区(它应该是线程安全的缓冲区(,第二个线程从那里获取它们。 我认为,对于你的问题,第二种方式更好。

实际上我需要的是全局静态变量。然后使用主线程中的另一种方法,我将该全局变量放入类属性中