Liste mit auszzuführenden Aufgaben gesucht



  • Moin liebe Leutz,

    so langsam fange ich an die Fähigkeiten meiner Denkmurmel anzuzweifeln. Seit Tagen grüble ich nun schon über folgendes Problem und komm einfach zu keiner Lösung:

    Ein Programm, geschrieben in VS2010/WindowsFormsAnwengung/C++ weils so schön einfach ist nen erstes Ergebnis zu erzeugen, soll Daten von einer Schnittstelle zu einer anderen weiterleiten.

    In dem schönen, von VS erzeugtem Programm, sind die ganzen Eventhandler für Buttons etc ja alle schon vorgefertigt. Soweit so gut, das find ich in meiner Bequemlichkeit auch ganz angenehm und will mich gar nicht beschweren. Nun will ich aber (dauernd) überprüfen ob Daten von A nach B oder andersherum angefordert wurden. Wenn ich jetzt aber einfach folgendes mache friert damit der ganze andere Rest ja ein:

    while(exitbutton oä){
    if(A_nach_B)
    sendeB(A);
    if(B_nach_A)
    sendeA(B);
    }

    Die Idee:
    Es müsste doch eigentlich eine Art Liste geben, die permanent abgearbeitet wird. In der dann die Evetns eingetragen werden, sobald sie auftauchen und dann bei nächster Gelegenheit abgearbeitet werden. Ich meine damit nicht die "Application Idle"-Funktion. Die hab ich schon versucht, aber die wird ja nur ausgeführt, wenn der Cursor sich auch bewegt. Nein, einfach die Liste der Aktionen, die noch ausstehen. In die ich dann immer wieder meine eigenen 2 Funktionen abwechselnd mit rein schmeiße. Und wenn zwischendrin ein Button gedrückt wird landet auch dieses Event mit drinnen und die GUI bleibt ansprechbar.

    Die ganze Geschichte:
    Vor mir hat jemand versierteres dafür ein Programm geschrieben. Dabei wurde in einem C/C++ Programm (ja C/C++, kein CLI) Multithreading benutzt (Thread_1 zum schauen, ob Daten von A nach B angefordert wurden, Thread_2 genau andersherum). Dummerweis stell ich mich zu doof an, dort weiter zu machen und da die Aufgaben des Programms sich ja in Grenzen halten, wollte ich das ganze mal eben kurz selbst hochziehen. Multithreading kann ich aber nicht nehmen. Denn sobald ich <afxwin.h> einbinde und die entsprechenden Sachen in den Projekteigenschaften einstelle ([Common Runtime Language] = [clr] und [Verwendung von MFC] = [gemeinsam genutzte DLL]) dann bricht beim mir alles zusammen. Nichts sagende Fehler, Acessviolations etc. Den Gedanken MT noch nutzen zu können hab ich schon längst aufgegeben. Doch streng genommen brauch ich auch gar kein MT. Es reicht ja immer abwechselnd zu schauen, ob Daten angefordert wurden.

    Die Schnittstellen:
    Sind leider extern und nicht einsehbar.
    Das eine ist eine verschlüsselte DLL und das andere eine .lib Dateien mit dazugehörigem Header.

    So, die Frage, die letztlich hinter all dem steckt:
    Gibt es eine solche Liste?
    Wenn ja, wie hänge ich meine eigene Funktionen da mit an.
    Wenn nicht, fällt euch eine andere Lösung ein?

    Danke schon mal im Voraus



  • Stichwort: Timer!



  • Klar, kann man machen. Jedoch ist der von VS zur Verfügung gestellte Timer (und somit der einzige von dem ich weiß) leicht begrenzt in der Geschwindigkeit: Intervall[ms](uint32)

    Also maximal 1kHz. ich bräuchte aber rund 5kHz, da das die Austauschrate zwischen den beiden Schnittstellen ist (genauer 4.4kHz).

    Aber klar: prinzipiell wäre ein Timer eine Lösung. Wobei, wenn du das vorschlägst, dies wohl bedeutet, dass dir keine "Abarbeitungsliste" bekannt ist. Schade.



  • Handelt es sich denn um Window-Events? Dann wäre WndProc der richtige Weg.

    Du könntest auch einen High-Precision-Timer von Windows verwenden:
    About Timers
    Acquiring high-resolution time stamps

    Für C# (aber auch einfach für C++/CLI umzuschreiben bzw. zu verwenden):
    Gewusst wie: Verwenden des hochauflösenden Zeitgebers
    High-Performance Timer in C#
    Microsecond and Millisecond C# Timer


Log in to reply