seltsames Thread verhalten
-
Hallo,
ich habe das Problem, dass sich ein Thread irgendwie komisch verhält ich versuche das mal zu schildern:
[code]
int main()
{
MyClass ^pclass=new MyCla .....
System::Threading::ThreadStart( ....&MyClass::Threadfunction
ThreadStart();
while not end
{
System::Threading::Thread::Sleep(100ms);
}
}void MyClass::Threadfunction...
{
while (true)
{
printf("looping");
recv() .....
}
}
[cpp]
So jetzt mal völlig Syntax unabhängig usw. ist es irgendwie komisch, dass die Schleife (while true) ind Threadfunction nur dann weiterloopt wenn neue Daten auf dem Socket ankommen, müsste diese nicht ununterbrochen laufen, mit natürlich kleinen Aussetzern wenn ein anderer Thread Proccesszeit benötigt?
Wenn jetzt 10sekunden kein Paket kommt läuft die while(true) auch nicht weiter.
Kann das jem. bitte erklären.
Danke!
-
Arg, schon wieder einer der sich nicht für eine Sprache entscheiden kann Diesmal nicht nur C++/CLI mit C++ gemischt, sondern C...
Wieso sollte die Schleife weiterlaufen, solchen Receive Funktionen sind meist blockierend. .Net bietet aber z.b. nen schönes asynchrones Programmiermodell, wo praktisch nen asynchronen Lesevorgang vom Netzwerk startest und das Programm normal weiterläuft, und sobald was da ist, wird ne Callbackfunktion die du angegeben hast aufgerufen und du kannst da dann die empfangenen Daten verarbeiten. Dadurch erspart man sich solch hässlichen while(true) Schleifen.
-
ach du mist, hatte ich total vergessen, das ist wohl ein blocking socket!!
arghhh danke, aber warum nicht für die sprachen entscheiden?
kannste des erklären?
-
CAsyncSocket hies das gute Stück soweit ich mich noch errinnern kann
-
wobei eigentlich sollte es ja egal sein, folgendes will ich lösen:
service
-> Empfangsthread
-> DatenverarbeitungsthreadJetzt kann ich:
-> Thread blockierend (recv)
-> Thread lesendoder
-> Thread mit AsyncSocket und Delegat auf recv
-> Verarbeitung im Asyncsock loopenWas ist sinnvoller, vorallem wie greife ich am besten auf den gleichen RingBuffer in der oberen Variante zu aus beiden Threads?