zugriff auf MainDLG aus Thread



  • Hallo ich habe ein Programm, dass mit Threads eine Aufgabe löst. Ich würde gerne dann das Ergebnis von den Threads auf meinem Hauptdialog ausgeben.
    Ich übergebe schon einiges an Datan an den Thread und zwar so

    DWORD WINAPI MAIN_THREAD(LPVOID param)
    {
    	main_data_s main = *((main_data_s *)param);
    

    wenn ich da aber nun nen zeiger auf meine Listbox reinpacke , haut es leider nicht hin, wäre auch zu einfach gewesen 🙂
    Danke schonmal für alle Hinweise.



  • Afair darf nur der Thread in einem Fenster arbeiten, der es auch erstellt hat - in diesem Fall also der Haupt-Thread. Aus deinem Arbeits-Thread kannst du die Ergebnisse an einer Stelle unterbringen, die beide erreichen können (z.B. hinter dem übergebenen LPVOID), und anschließend eine Nachricht an den Haupt-Thread senden, daß er diese Daten jetzt anzeigen darf.



  • schaust du hier da ist erklärt wie man eine user-message erstellt und wie man Daten mitgibt wirst du sicher selbst raus finden, ist ja dann das kleiner Problem.



  • danke , das mit POstMessage() haut wunderbar hin 🙂 auch sehr gut beschrieben auf der seite

    jetzt habe ich aber ein problem mit CstringArray, vielleicht kann ja in diesem Thread auch dazu geholfen werden

    typedef struct
    {
    	int tnum;
    	HWND mHwnd;
    	CStringArray *usernames;
    } main_data_s;
    
    main_data_s m;
    m.mHwnd	= ::GetActiveWindow();
    m.usernames = &usernames;
    

    dann starte ich den mainThread wie oben gepostet und dachte dann ich komme an die daten mit

    main.usernames->GetAt(i)
    

    aber leider haut das nicht immer hin, teilweise bekomme ich den ersten eintrage teilweise nicht. kann es mir garnicht erklären...

    ich will also dem Thread einen pointer auf ne struct übergeben, wo wieder mehrere poinnter auf CstringArrays stecken...

    Hoffe ich konnte es verständlich rüberbringen 🙂



  • Hab nun mal ein wenig rumprobiert und bin nur zu diesem ergebnis gekommen..

    1>c:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afxcoll.h(590): error C2248: "CObject::CObject": Kein Zugriff auf private Member, dessen Deklaration in der CObject-Klasse erfolgte.
    1>          c:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(534): Siehe Deklaration von 'CObject::CObject'
    1>          c:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(509): Siehe Deklaration von 'CObject'
    1>          Diese Diagnose trat in der vom Compiler generierten Funktion "CStringArray::CStringArray(const CStringArray &)" auf.
    


  • er sagt dir doch das diese member private ist, schreib public: davor und du solltest drauf zu greifen können



  • Hat sich erledigt das prob lag daran, dass ich nen lokales objekt übergeben habe, was ausserhalb der funktion nicht gültig war 🙂


Anmelden zum Antworten