OVERLAPPED Struktur erklären



  • Ich weis das man beim komunizieren mit dem Com-Port über die Win NT Reihe (aufwärts) eine OVERLAPPED Strutur brauch. ich hab dazu auch schon die engl. Hilfe in der Platform SDK durchgelesen.
    Aber ich habs ehrlich gesagt nicht verstanden.
    Für was ist diese Strukur also da, und was sollen die Parameter darstellen?



  • Hast du dir aus Synchronization and Overlapped Input and Output durchgelesen?
    Was genau ist dir denn unklar bzw. womit hast du Probleme 🙄



  • Ich versteh allgemein nicht wofür die gut sein soll. Mein English ist leider nicht das beste.
    Ich ha das so verstanden, das es aus irgendeinem Grund passieren kann, das der zum Bsp. beim Daten lesen mit Readfile() abbricht und das dann dort in der Struktur das drin steht. Also irgenein Handle und bei was. Ich hab aber keine Ahnung wie ich das dann zuverarbeiten habe.
    Ode reciht es zum Bsp. bei Readfile die OV Struktur mit anzugeben und dann einnfach gar nicht weiter zu beachten, kann ich mir aber irgendwie net vorstellen.



  • Wenn du das nicht verstehst wäre es an der Zeit englisch zu lernen, da fast alles (Dokus, Tutorial, ect.) auf englisch ist.

    When a function is called to perform an overlapped operation, it is possible that the operation will be completed before the function returns. When this happens, the results are handled as if the operation had been performed synchronously. If the operation was not completed, however, the function's return value is FALSE, and the GetLastError function returns ERROR_IO_PENDING.

    Wenn du eine OVERLAPPED Struktur angibst, und das entsprechende Flag setzt kehrt die Funktion sofort zurück. Jetzt kann es sein, dass sie Erfolg zurückmeldet, und ihre Aufgaben schon erledingt hat, oder sie liefert FALSE zurück um anzuzeigen, dass sie noch nicht fertig ist (evtl. ist natürlich auch ein anderer Fehler aufgetreten) und GetLastError liefert ERROR_IO_PENDING. Wenn die Funktion dann fertig ist signalisiert sie das in der OVERLAPPED Struktur angegebene hEvent. Darauf kannst du z.B. mit den Wait-Funktionen warten.

    Du musst die Kommunikation aber ja nicht asynchron laufen lassen 🙄



  • Bigwill schrieb:

    Ich versteh allgemein nicht wofür die gut sein soll.

    Das ganze dient dazu, dass ein Funktionsaufruf deine Anwendung nicht blokiert, sondern du sofort weiterarbeiten kannst.



  • flenders schrieb:

    Wenn du das nicht verstehst wäre es an der Zeit englisch zu lernen, da fast alles (Dokus, Tutorial, ect.) auf englisch ist.

    When a function is called to perform an overlapped operation, it is possible that the operation will be completed before the function returns. When this happens, the results are handled as if the operation had been performed synchronously. If the operation was not completed, however, the function's return value is FALSE, and the GetLastError function returns ERROR_IO_PENDING.

    Wenn du eine OVERLAPPED Struktur angibst, und das entsprechende Flag setzt kehrt die Funktion sofort zurück.
    Du musst die Kommunikation aber ja nicht asynchron laufen lassen 🙄

    Was bedeutet den sofort. Klingt blöd, ich weis, also was macht der da, mal am bsp..
    Angenommen ich benutze WriteFile() und will 80 Zeichen schicken, ich rufe die Funktion auf. Kehrt er gleich nach dem Funktionsaufruf zurück, dann wird er die 80 Zeichen ja wohl schwerlich schaffen oder gleich nachdem er die 80 zeichen dem Buffer übergeben hat.

    Asyncron war doch wo man senden und epfangen gleichzeitig kann, stimmts?! Dann will ich das natürlich. Ansonsten klehrt mich bitte auf.

    Also wäre die richtige Anwendungsweise wohl, das wenn ich In der OV-Struktur was drinne habe, dann ein weit ausführe, also auf das Handle warte und ansonsten meine arbeit gleich fortsetze, oder?!

    Aber danke schon mal für die Hilfe.



  • Sofort ist kein fest definierter Zeitraum, aber bei längeren Aktionen wird diese wohl vor Rückkeht noch nicht beendet sein, wenn du aber z.B. nur ein Byte liest könnte es durchaus passieren, dass dies erfolgt ist, bevor die Funktion zurückkehrt.
    Asynchron heißt in diesem Falle, dass die Programmausführung fortgesetzt wird und du z.B. während des Lesen etwas anderes machen kannst. Wenn du dies eh nicht vorhast brauchst du imho das ganze OVERLAPPED Zeugs gar nicht



  • Ich tue aber meine ReadFile Funktion in nehm eignene Thread laufen lassen mit Wait ...EVent() da brauch ich das aber. Das ist doch dann Asyncron, wenn ich das jetzt richtig verstanden habe.

    Habe gerade noch gesehen, das da ja Quelltextbsp. drin stehen, die hatte ich vorher immer übersehen. Ich glaube ich kkomme jetzt soweit klar.

    Danke an alle.



  • Versuche bitte etwas mehr auf deine Rechtschreibung zu achten - das ist teilweise schon richtig schwer zu lesen 🙄

    Bigwill schrieb:

    Ich weiß das man beim kommunizieren mit dem Com-Port über die Win NT Reihe (aufwärts) eine OVERLAPPED Strutur braucht.
    [...]
    Asynchron war doch wo man senden und empfangen gleichzeitig kann, stimmt**'s?! Dann will ich das natürlich. Ansonsten klärt mich bitte auf.
    [...]
    Ich tue aber meine ReadFile Funktion in einem eigene
    n** Thread...
    [...]
    Habe gerade noch gesehen, dass da ja Quelltextbsp. drin stehen

    Dies sind noch nichtmal alle 🙄 - wir haben ja hier auch eine Vorschau-Funktion



  • Das liegt an meiner Faulheit aber wenigstens bin ich ehrlich und geb es zu. Aber ich versuche mich zu bessern und das hier ist doch schon mal ein Anfang, oder? 😉


Anmelden zum Antworten