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

时间:2017-07-08 18:57:45

标签: c++ multithreading

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

是否有可能在不从第二个线程返回的情况下从第二个线程接收到每个帧的主线程的消息的字符串值? 在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();
}

ThreadFunction:

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”字符串?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

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