簡體   English   中英

從無限線程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();
}

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

是的,當然。 有許多解決此問題的方法。 一種方法是使用信號和時隙,例如Qt。 對於純C ++,您可以使用Boost.Signals2,它是線程安全的。 或者,您可以實現模式生產者-消費者。 一個線程(生產者)將值放入緩沖區(應該是線程安全的緩沖區),第二個從那里獲取它們。 我認為,對於您的問題,第二種方法更好。

實際上,我需要的是全局靜態變量。 然后使用主線程的另一種方法,將該全局變量放入類屬性中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM