Laden...

blockierzeit begrenzen

Letzter Beitrag vor 19 Jahren 3 Posts 1.705 Views
blockierzeit begrenzen

Hi!

Hat jemand von euch eine Idee, wie man die Blockierzeit einer Funktion begrenzen kann?

Konkret geht es um die receive()-funktion von UdpClient. Die Methode blockiert, bis sie Daten empfängt.

Das Problem an der Sache ist: Wenn nun keine Daten eintreffen und ich das Programm beenden will, kann ich den Thread, von dem aus ich die receive aufgerufen habe, nicht beenden, da die Funktion ja noch blockiert...

Bin für jeden Tipp dankbar...

Grüße,

silversurger

Möglicherwiese über Thread-Timeouts? Stichwort RegisterWaitForSingleObject aus dem System.Threading namespace? MSDN

Den Thread musst du über ein WaitHandle beenden. Anstelle mit Receive() arbeitest du mit BeginReceive und legt anschliessend den Thread mit WaitAny({socketWaitHandle,threadAbortWaitHandle}) schlafen:

 
m_asynResult = m_socClient.BeginReceive(m_DataBuffer,0,m_DataBuffer.Length,SocketFlags.None,null,null);
int raisingHandleIndex = WaitHandle.WaitAny(new WaitHandle[] {m_asynResult.AsyncWaitHandle, threadAbortWaitHandle} )
{
   if(raisingHandleIndex  == 0) // Socket-Ereignis, sonst Thread-Abort
   {
      int iRx = 0 ;
      iRx = m_socClient.EndReceive (m_asynResult);
      // verarbeiten
   }
}