[英]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.