NamedPipeServerStream::BeginWaitForConnection(AsyncCallback^ callback,Object^ state)
-
NamedPipeServerStream::BeginWaitForConnection(AsyncCallback^ callback,Object^ state)
Hi,
bei dieser Methode bleibt er nicht an der Stelle stehen sondern arbeitet den darauf folgenden Code weiter ab. Dafür muss man dann aber einen Einsprungspunkt erstellen, wo weiter gemacht wird wenn ein Connect eingetreten ist. Anders als bei WaitForConnection() .
Was ich nicht verstehe ist, wie ich die System::IAsyncResult, System::AsyncCallback, System::Object einsetzten muss, wenn BeginWaitForConnection() in einem Thread gesartet wird. Und bei Connect ein Event ausgelöst werden sol, was auf eine Funktion verweist bzw. ausführt die nicht in einer Thread liegt.
-
Schau Dir doch das Beispiel an...
http://msdn.microsoft.com/de-de/library/system.iasyncresult(VS.80).aspxIAsyncResult aResult = sampleDelegate.BeginInvoke(callParameter, null, null); //Wait for the call to complete // UND HIER KANNST DU DANN AUCH AUF MEHRERE EVENTS WARTEN... aResult.AsyncWaitHandle.WaitOne(); callResult = sampleDelegate.EndInvoke(aResult);
-
Funktioniert das in etwa so:
static void IAR(IAsyncResult ^ar) { }
[Thread]
... IAR(BeginWaitForConnection(...)); ...
?
-
Es funktiniert wie in dem Beispiel... so schwer ist das doch nicht, oder?
-
Jochen Kalmbach schrieb:
Es funktiniert wie in dem Beispiel... so schwer ist das doch nicht, oder?
Naja, es macht bei mir nicht klick, bin nicht sicher.
BeginWaitForConnection(...) verlangt ein AsyncCallback. Aber wenn ich dieses in der selbigen Funktion (Thread) instanziere komme ich nicht von drausen dran. Aber ein Typ das von ^ ist kann ich nicht global machen. Ich muss eine Funktion des Datentyp(Rückgabewert) AsyncCallback schreiben?Ich meine ich möchte es nicht einfach kopieren ich möchte schon verstehen was da genau passiert.
-
static IAsyncResult IAR(IAsyncResult ^ar) { ... static IAsyncResult ^AR = ar; return AR; }
AsyncCallback ^ AC(IAsyncResult ^ar) { ... }
[Thread]
... BeginWaitForConnection(AC(IAR(void))); ...
-
Also entweder habe ich es jetzt verstanden oder nicht. Ist das so, dass wenn BeginWaitForConnection(...) ausgeführt wird, es auf ein Connect wartet und wenn dieser erfolgt ist, gibt BeginWaitForConnection(...) ein IAsyncResult zurück.
Möchte man BeginWaitForConnection vorzeitig beenden, muss man dies über AsyncCallback mit dem BeginWaitForConnection aufgerufen wurde tun.
-
Du musst nur eine Callback übergeben...
Begin...(new AsyncCallback(this, &MyCallback); void MyCallback(IAsyncResult result) { // ... }
-
pipeStream->BeginWaitForConnection(gcnew AsyncCallback(&Result),this);
error C2673: 'NamedPipeServerStream_WaitForConnectionThreadProcess': Globale Funktionen haben keinen this-Zeiger
Der zweite Parameter wo this steht ist soll ein System::Object sein. Soll das so eine art Identifikationskarte sein? Also kann man da auch einfach einen String rein tun? Oder wozu ist das gut?
-
Wenn Du einen statische Methode hast, dann lass halt "this" weg...
-
Jochen Kalmbach schrieb:
Wenn Du einen statische Methode hast, dann lass halt "this" weg...
Die ist nicht static. Die Funktion ist halt global von einer .cpp aus und nicht in einer Klasse.
Was würde den this bewirken? Dass alle Member von der Klasse übergeben werden?
-
LiGERWooD schrieb:
Jochen Kalmbach schrieb:
Wenn Du einen statische Methode hast, dann lass halt "this" weg...
Die ist nicht static. Die Funktion ist halt global von einer .cpp aus und nicht in einer Klasse.
Was würde den this bewirken? Dass alle Member von der Klasse übergeben werden?
static oder global.
Zu this:http://msdn.microsoft.com/en-us/library/y0dddwwd.aspx
-
So weit so gut. Bei ausführung von BeginWaitForConnection(...) wird eine Funktion des Datentyp IAsyncResult ausgeführt, genauso gut würde auch eine void Funktion ausgelöst. Wo sagt mir denn nun IAsyncResult das ein Connect von BeginWaitForConnection(...) erfolgt ist, auser das mir AsyncState ein voher übergebenes Unterscheidungsobjekt gibt, nütz mir das so bis jetzt nichts. Oder übergibt IAsyncResult einen Zeiger von der instanzierten NamedPipeServerStream?
-
http://msdn.microsoft.com/de-de/library/system.io.pipes.namedpipeserverstream.aspx
http://msdn.microsoft.com/de-de/library/system.io.pipes.namedpipeserverstream.beginwaitforconnection.aspx
-
theta schrieb:
http://msdn.microsoft.com/de-de/library/system.io.pipes.namedpipeserverstream.aspx
http://msdn.microsoft.com/de-de/library/system.io.pipes.namedpipeserverstream.beginwaitforconnection.aspxDanke theta aber diese msdn Beispiele kenne ich schon und da steht nirgends wo ich ein Event verknüpfen kann bei eintreten eines Connectes.
Auser IsConnected. Aber dann müste ich ja exta dafür ne schleife machen, die wiederum nen Thread braucht.
-
Das ist komisch:
Parameter
callback
Typ: System..::.AsyncCallback
Die Methode, die aufgerufen wird, wenn ein Client eine Verbindung mit dem NamedPipeServerStream-Objekt herstellt.Es wird auf der stelle ausgeführt, gleich nach dem BeginWaitForConnection(...) ohne das überhaubt ein Connect ausgeführt wurde.
Das ist doch sinn der Sache oder, dass es erst passiert wenn ein Connect erfolgt ist?
Oder habe ich hier was falsch verstanden und es geht erst hinter WaitOne() weiter wenn ein Connect erfolgt ist?
-
Jetzt sehen wol die Meister wohl zum ersten mal, dass die MSDN unzureichend Informationen liefert für Methoden aus der .Net Bibliothek die nichts mit den Objekten aus der Toolbox zu tun haben.
-
Quatsch, aber ich habe aufgegeben Dir zu antworten, weils einfach irgendwie sinnlos ist.
-
theta schrieb:
Quatsch, aber ich habe aufgegeben Dir zu antworten, weils einfach irgendwie sinnlos ist.
Du weist die Antwort selber nicht.
Brobier es doch selbst aus. Die Methode wird auf der stelle mit der ausführung von BeginWaitForConnection aufgerufen.
-
LiGERWooD schrieb:
theta schrieb:
Quatsch, aber ich habe aufgegeben Dir zu antworten, weils einfach irgendwie sinnlos ist.
Du weist die Antwort selber nicht.
Doch.
LiGERWooD schrieb:
Die Methode wird auf der stelle mit der ausführung von BeginWaitForConnection aufgerufen.
Nö. Und wenn doch, ev. weil schon Connected ist.