我將數據作爲字符串通過UDP傳輸到虛幻引擎內的Socket類中。這是線程化的,並在後臺運行。C++流udp數據到隊列?
我讀功能是:
float translate;
void FdataThread::ReceiveUDP()
{
uint32 Size;
TArray<uint8> ReceivedData;
if (ReceiverSocket->HasPendingData(Size))
{
int32 Read = 0;
ReceivedData.SetNumUninitialized(FMath::Min(Size, 65507u));
ReceiverSocket->RecvFrom(ReceivedData.GetData(), ReceivedData.Num(), Read, *targetAddr);
}
FString str = FString(bytesRead, UTF8_TO_TCHAR((const UTF8CHAR *)ReceivedData));
translate = FCString::Atof(*str);
}
我然後調用從另一大類translate
變量,在Tick
,或定時器。
我的測試用例從另一個應用程序發送遞增號碼。
如果我從上面的Read函數中打印這個數字,它看起來像預期的那樣,遞增計數。 當我從另一個線程打印它時,它缺少一些數字。
我相信這是因爲我在Tick上調用它,所以它由於處理時間而錯過了一些數據。
我的問題是:
是否有排隊的輸入數據的方式,所以,當我拉的價值,它是一個增量值,而不是當前的一個?什麼是最好的方式去做這件事?
謝謝,請讓我知道如果我不清楚。
你還沒有清楚。您在評論中否定了您在問題中明確發佈的「while」循環的存在。 – EJP
啊,我很抱歉,我在深夜創建了這個問題,並粘貼了錯誤的代碼塊。我已經更新到應該在那裏的'if'循環。 – anti