multithreading mit events

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • multithreading mit events

    hi,

    ich habe gerade folgendes problem...

    in einem prozess mit mehreren dlls ist immer eine aktion im gange (pol), bzw wartet es mit waitforsingleobject().
    eine dll davon ist ein com-client und erwartet events von dem server.

    die events kommen jedoch nie an und der com-server meckert, dass der clientprozess in benutzung ist. relativ logisch, zwecks der aktionen und dem waitforsingleobject().

    wenn ich die dll mit dem com-client in eine seperate exe-anwendung packe und diese mit einer pipe oder so mit den anderen dlls verbinde, klappt alles einwandfrei und ich empfange events vom server.
    ich will aber keine seperate anwendung. also was kann ich machen, dass die dll die events empfangen kann?

    habe schon an einen neuen thread gedacht. jedoch weis ich nicht wie, da ich ja in einen thread nur eine funktion packen kann, aber net auf events warten kann!

    ist mein problem klar? will halt die dll mit dem com-client irgendwie entkoppeln.

    hat da jemand ein tip?

    gruß
    pitrie
  • Hi,
    der Punkt ist dass du dich wahrscheinlich seit Wochen mit dem Projekt beschäftigst und für dich alles glasklar ist,aber nen aussenstehender mit 3-4 Sätzen oder jetzt auch deinem Bildchen nicht wirklich was anfangen kann.
    Wenn dein Projekt nicht top secret ist kannst du es mir gerne komplett zuschicken,dann schau ich mal ob ich dir da weiterhelfen kann.
    Ansonsten ist das Ganze eher nen (un)lustiges Ratespiel.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • leider ist es secret :( sonst wäre ich glei dabei.

    habe nur gedacht, dass mir jemand erklären kann wie ich das warten auf ein event in einen seperaten thread stecken kann.

    bzw wenn ich eine windows applikation erstelle, dann geht es ja. vielleicht kann mir ja einer sagen, wie ich in die 1. dll auch eine pause einfügen kann, in der der thread events empfangen kann.

    gruß
    pitrie
  • Das ist natürlich schade(für dich :wink: ).
    Aus nem anderen Forum weiß ich nur dass du das mit der Threadfunktion nicht wirklich verstanden hast.
    Du musst nicht connect als Threadfunc übergeben.
    Was die Threadfunktion macht steht dir vollkommen frei.
    Du kannst innerhalb der Threadfunktion sooft connect usw. aufrufen wie du willst.
    Du kannst das Ganze z.B. in ner Endlosschleife laufen lassen,sooft mit WaitForSingleObject warten wie die willst usw.
    Wie das jetzt allerdings in deinem konkreten Fall auszusehen hat.....keine Ahnung.
    Wie gesagt das ist für nen aussenstehenden nur äußerst schwierig zu durchschauen.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • das ist mir klar. aber ich bekomme halt kein handler zurück, wenn ich mich für das event registriere .. das geschieht über atl so...

    Quellcode

    1. STDMETHOD( OnData ) ( VARIANT dataArray );
    2. BEGIN_SINK_MAP( xxx )
    3. SINK_ENTRY_EX( xxx_SINK, DIID__xxx, 9, OnMyData)
    4. END_SINK_MAP()


    OnMyData ist dann die Funktion, die meine Implementierung inne hat.

    somit kann ich ja net auf einen handler warten und die Funktion OnMyData kann ich ja auch nicht in einen thread stecken, da sie von außen aktiviert wird.

    gruß
    pitrie
  • Vielleicht kannst du ja posten wie der Code aussieht den du in der (überflüssigen) Exe stehen hast?
    Dann könnten wir eventuell zusammen ne Threadfunc erstellen die deine ungewollte exe verbannt.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • ich glaube da ist wirklich was falsch rübergekommen.

    also ich meinte, dass wenn ich den gleichen code der dll nehme und ihn als windows-applikation starte ( also extra prozess und anhand der windows-applikation immer zeit in dem der process nichts macht und auf events wartet ) dann funktioniert der code. nur wenn ich sie in eine dll lege, geht sie nimmer.