Я задаюсь вопросом, могу ли я установить значение тайм-аута для UdpClient, получают метод.
Я хочу использовать блочный режим, но потому что иногда udp будет потерянный пакет, моя программа udpClient.receive зависнет там навсегда.
какие-либо хорошие идеи, как я могу управлять этим?
То, что имеет в виду Филип, вложено в сокет, который содержит UdpClient
( UdpClient.Client.ReceiveTimeout
) .
Для этого также можно использовать асинхронные методы, но вручную заблокировать выполнение:
var timeToWait = TimeSpan.FromSeconds(10);
var udpClient = new UdpClient( portNumber );
var asyncResult = udpClient.BeginReceive( null, null );
asyncResult.AsyncWaitHandle.WaitOne( timeToWait );
if (asyncResult.IsCompleted)
{
try
{
IPEndPoint remoteEP = null;
byte[] receivedData = udpClient.EndReceive( asyncResult, ref remoteEP );
// EndReceive worked and we have received data and remote endpoint
}
catch (Exception ex)
{
// EndReceive failed and we ended up here
}
}
else
{
// The operation wasn't completed before the timeout and we're off the hook
}
>>> tuple(['hello'])
('hello',)
Но встроенный синтаксис существует не просто так.
-121--3832373-Во-первых, не храните сами объекты на карте, храните указатели на объекты.
Во-вторых, нужно дать экземпляр Scene_Branding std::make_pair, а не самому классу.
ПРАВКА: Вот то, как вы идете о хранении указателей:
string CurrentScene = "Scene_Branding";
map<string, Scene*> Scenes;
Scenes.insert(std::make_pair("Scene_Branding", new Scene_Branding()));
, Но, так как вы спросили этот тип вопроса, я рекомендую, чтобы вы прочитали хороший c ++ книга для дальнейшего схватывания понятий как указатели.
-121--2496176-Существует свойство ReceiveTimeout, которое можно использовать.