我正在用 C# 为 Unity 编写一个脚本来读取来自多个来源的消息。我有一个函数ReadMessage,它接受一个端口字符串并返回一个字符串 ID 号。问题是,我有十几个不同的连接需要读取,并且消息在停止尝试并让代码继续之前有一个 10 毫秒的超时计时器。当我有十几个线程等待前一个线程完成加入时,这会导致帧速率降低。我的线程代码如下:
string threadOneString= null;
Thread ThreadOne;
//Repeat for 11 more threads
void Update () {
ThreadOne = new Thread(
() =>
{
threadOneString = ReadMessage(someClass.port);
});
ThreadOne.Start();
//Repeat for 11 more threads
}
void LateUpdate () {
ThreadOne.Join();
//Repeat for 11 more threads
UpdateClass(threadOneString);
//Repeat for 11 more threads
UpdateTextDisplay(); //Just updates a Unity Text object
}
还有我的ReadMessage代码,以防万一。
private string ReadMessage(string port) //Change this name to ReadButtonPress
{
string fullMessage = "";
someStruct parsedMessage;
var timeout = new System.TimeSpan(0, 0, 0, 0, 10); // Less than 10 and it starts to miss most messages, ideally this would be a bit higher
string connectionString = PROTOCOL + CONTROLLER_IP + ":" + port;
AsyncIO.ForceDotNet.Force();
using (var subSocket = new SubscriberSocket())
{
subSocket.Connect(connectionString);
subSocket.Subscribe("");
subSocket.TryReceiveFrameString(timeout, out fullMessage);
UnityEngine.Debug.Log("Message: " + fullMessage);
subSocket.Close();
}
// Some message parsing and checking...
return parsedMessage.someString;
}
我想做的,但我不知道是否可能,是同时为每个线程调用 Joins,而不是调用一个,等待,然后调用下一个。线程不相互交互,所以我希望这是可能的。如果没有,我将不胜感激另一个解决方案或建议。
编辑:澄清正在发生的事情。当我只运行几个线程时,我的 FPS 为 65-70。当我运行所有 12 个线程时,我的 FPS 下降到 ~50 并且我有 60 FPS 的硬要求。
慕仙森
慕少森
精慕HU
相关分类