Mehrere Prozesse gleichzeitig?



  • hustbaer schrieb:

    Johannes251298 schrieb:

    Vielen Dank für die Antwort, das heist ich muss einfach nur meine funktion mit CreateThread aufrufen und das war's!, oder?

    OMG nein.
    Multithreading ist nicht "einfach mit CreateThread aufrufen und das war's!".

    haha xD

    nein, es wäre schon nützlich, wenn man ein bisschen weiß, was man tut.

    jeder prozess enthält einen thread, den haupt-thread. dieser ist der einsprungspunkt. der einsprungspunkt wird durch die adresse auf den ersten auszuführenden opcode beschrieben. jetzt kann man aber mehrere threads generieren (zur laufzeit!!). hierbei bezieht sich dieser auf eine funktion im speicher. jetzt wird die rechenzeit auf die threads verteilt, jeder thread darf abwechselnd je nach priorität weiter ausgeführt werden. dies führt zur scheinbar parallelen ausführung. ist wie beim multitasking, nur hier eben prozessintern.

    dies ist nur eine seeeeehr grobe beschreibung. wie das intern in windows genau gemanaged wird kann ich dir jetzt auch nicht sagen.



  • Ein bisschen Theorie (auf Englisch):

    http://www.youtube.com/watch?v=2LDN-4ewv9k



  • Vielen Dank für das Video!
    Ich habe aber trotzdem gerade ein Problem. Ich starte meinen Thread in WM_CREATE so:

    hSetEventLog = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)SetEventLog, NULL, 0, NULL);
    

    Und dan wenn ich während der Thread das erste Mal leuft, einen Button klick, kommt er zwar im debugger an den WM_COMMAND point an, aber die MessageBox wird erst nachdem der Thread beendet wurde angezeigt. Hier mein WM_COMMAND:

    SuspendThread(hSetEventLog);
    wstring Title = GetAppText(77);
    wstring Text = GetAppText(78);
    if(MessageBox(NULL, Text.c_str(), Title.c_str(), MB_YESNO | MB_ICONWARNING) == IDYES)
    {
       //Code
    }
    

    Aber wenn der Thread ein zweites, drittes... Mal aufgerufen wird dan macht er alles perfekt...

    Wie soll ich das verstehen??? 😕

    Vielen Dank
    Johannes



  • Vergiss bitte sofort dass es eine Funktion mit Namen SuspendThread gibt!


  • Mod

    hustbaer schrieb:

    Vergiss bitte sofort dass es eine Funktion mit namen SuspendThread gibt!

    +1
    http://blog.kalmbachnet.de/?postid=6
    http://blog.kalmbachnet.de/?postid=16
    http://blog.kalmbachnet.de/?postid=17



  • Vielen Dank, aber ohne SuspendThread habe ich genau das gleiche Problem...



  • Um etwas genauer zu erkleren (vieleicht hilft das ja), habe ich eine ListView in meinem WM_CREATE erstellt, und in dem neuen Thread lese ich dan nen File ein den ich dan in der ListView anzeigen lass. Könnte es daran vieleicht liegen das er hängen bleibt? Wenn ja wie könnte ich es dan am besten Anstellen?



  • Auf Oberflächen-Elemente darf man nur aus dem Oberflächen-Thread zugreifen! DU musst die Aufruf in den passenden Thread bringen. Das macht man i.d.R. mit WM_APP+x



  • Wie? Soll ich dan das über WM_APP weiterleiten (von dem Thread zu der WMDPROC) und dann in der WNDPROC wo die ListView erstellt wurde weiterverarbeiten? Wenn es das ist was du meinst, dan nützt mir ja der zweite Thread rein garnicht's, weil während er alles reinschreibt in die ListView steht das Programm ja dan trotzdem, oder?

    Vielen Dank
    Johannes



  • Der zweite Thread nützt Dir nur etwas für Hintergrundoperationen (z.B. einlesen von Dateien). Für Oberflächen-Operationen nützt er Dir nichts.


Anmelden zum Antworten