Threads



  • was verstehst du unter mainthread ?
    die CMain:CWinThread klasse erstellt doch die MainFrame klasse und dieses zeigt zwei formviews in einen splitter

    schau dir doch ma die TestApp an die ich hier zum DL reingestellt habe - koenntest du die anpassen das das mainframe und die dazugehoerigen formview klassen in einem thread laufen?
    mir fehlt mitlerweile jeglicher ansatz, und hab auch keine idee mehr was ich noch probieren koennte,
    je mehr ich hier les desto weniger weiss ich was ich wo machen muss damit das mainframe in einem thread laeuft #sftz

    ich habe eine
    CTestApp:CWnd welche ein CMainFrame:CFrameWnd klasse aufruft, diese wiederrum besitzt einen splitter mit zwei CFormView fenstern
    diese oberflaeche brauch ich in einem thread
    mein versuch eine CMain:CWinThread dazwischen zu schalten brachte bisher keine erfolge, zu sehen an der TestApp2
    ich raff den scheiss einfach nich, also wie ich dieses doofe mainframe in einem thread bekomm



  • wisst ihr was, ich machs nun so

    ich mach die app erstma ohne multithread weiter {das was lange dauert ist ja bereits fertig}
    ist noch genug zu tun

    und sobald das alles laeuft, versuch ich nocheinmal die aufrufe in nem workter thread auszulagern

    also
    OnCall
    OnUpdate
    OnFinished usw

    vielen dank trotzdem


  • Mod

    Also ich erzähle Dir mal die Geschichte Deiner Applikation:
    1. Dein Programm startet. DU hast einen Thread (Der Main Thread).
    2. CTestAppApp::InitInstance() wird ausgeführt.
    3. Der neue Thread startet.

    Ab jetzt hast Du 2 Threads, den 1. Thread von CTestAppApp und den zweiten von CMain. D.h. jetzt läuft einiges parallel.

    CMain:
    4. CMain::Initinstance erzeugt Fenster.
    5. CMain::Run läuft

    CTestAppApp:
    5. InitInstance returniert, aber es gibt kein Fenster.
    6. Kein Run läuft an. ExitInstance wird ausgeführt.
    7. Die Applikation terminiert brutal, alles.

    Es bleiben Leaks.

    Bau mal ein AfxMessageBox in Dein InitInstance nach dem Threadstart ein.
    Und wundere Dich was passiert! 🕶



  • interessant - echt - trotzdem weiss ich nicht wie es nun richtig geht {o;


  • Mod

    Präzisiere was Du nicht verstehst. Ich habe doch beschrieben was passiert.

    Ich weiß immer noch nicht was Du eigentlich willst!
    Warum willst Du einen zweiten GUI Thread?
    Was ist der Sinn hinter dem Ganzen?
    Warum baust Du nicht eine normale Windows Applikation und lagerst die "Arbeit" in einen Workerthread aus. Der hat dann keine Fenster und auch keine Messageloop.



  • willst du etwa sagen, wenn ich eine SDI app vom wizard erstellen lass - laeuft dieser bereits in einem thread ???
    wenn ja dann hab ich was verpasst - dann isses klar das ich kein zweiten brauch

    mit den worker threads hab cih eh spaeter vor, siehe mein vorletzten post


  • Mod

    Mr Evil schrieb:

    willst du etwa sagen, wenn ich eine SDI app vom wizard erstellen lass - laeuft dieser bereits in einem thread ???
    wenn ja dann hab ich was verpasst - dann isses klar das ich kein zweiten brauch

    mit den worker threads hab cih eh spaeter vor, siehe mein vorletzten post

    So ist es. Alles was Code ausführt ist entweder ein Thread oder ein Fiber...

    Somit startet ein Prozess mit einem Thread und existiert so lange bis einer ExitProcess aufruft oder der letzte Thread terminiert.

    Technisch gesehen gibt es auch keine Main-Thread. Man sagt das nur gerne zu dem Thread, der als erstes gestartet ist.

    Ob Du nun einen neuen Thread brauchst oder nicht, kann ich Dir nicht sagen, auf jeden Fall besteht ein Prozess aus mindestens einem Thread...



  • achsooooooooooo - jetzt wird einiges klarer warum du so verwirrt bist
    die app laeuft bereits in diesem "MainThread" und ich habe versucht in diesem thread die oberflaeche in einen zweiten thread laufen zu lassen

    ok dann ergibt das kein sinn #gg

    wie gesagt, ich hab erstmal andere sachen noch zu erledigen und versuch mich dann an nem worker thread fuer die aufrufe

    vielen vielen dank


Anmelden zum Antworten