从无限线程 c++ 中捕获值
Capture value from infinite thread c++
我创建了一个运行主线程的线程。两个线程都在无限地做某事(都有 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。 或者你可以实现模式生产者-消费者。一个线程(生产者(将值放入缓冲区(它应该是线程安全的缓冲区(,第二个线程从那里获取它们。 我认为,对于你的问题,第二种方式更好。
实际上我需要的是全局静态变量。然后使用主线程中的另一种方法,我将该全局变量放入类属性中
相关文章:
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- 循环无限运行C++解决骑士之旅问题
- 过载'operator new'如何导致无限循环?
- 在Qt中实现无限可缩放的画布
- C++正则表达式无限循环
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 交换运算符 + 重载会导致无限递归
- 无限嵌套具有变体的地图
- 遍历链表时的无限循环
- 循环链表:无限循环
- 比较两个字符串后卡在无限循环中
- 在做一段时间内检查字符的无限循环
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 可能的无限循环
- 超出 int 的值范围后的无限循环
- 为什么这段代码会导致无限循环?
- 运行无限循环的最小二叉树问题
- USplineComponent Bounds SphereRadius 失败无限
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?