Multithread problem

LuckyProgger

Grünschnabel
Hi,
hab folgendes problem: Ich hab eine Dialog anwendung mit einer listbox(kleiner chat). ich hab neben dem dialog einen thread laufen um nachrichten abzufangen und in der listbox anzuzeigen. nur geht des nicht. wenn ich aus dem thread direkt die nachricht ausgeben will kommt ein fehler.
und jetzt weis ich nicht weiter. vllt kann mir hier einer helfen bzw denkhilfe leisten um das problem zu umgehen

danke
 
Moin,

was für ein Fehler erhälst du und wie willste auf die ListBox zugreifen. Haste es schon trocken, also ohne Thread versucht?




Mfg
ToDu
 
Tut mir leid, mit einer solchen Frage kann man absolut nichts anfangen.
Siehe bitte am Anfang der Themen die Hinweise:
Die richtige Frage
Angaben bei Fragen zu Fensteranwendungen.

Vorab:
Sollte es sich um eine WIndowsanwendung handeln bedenke, dass z.B. Windowsmessages nur abgefangen werden können, wenn der Thread über eine entsprechende Messagequeue verfügt, also mit anderen Worten ein Window ist. Für den Zugriff auf Elemente eines anderen Threads gibt es verschiedene Möglichkeiten. Im einfachsten Fall reicht die CriticalSection aus.
Aber wie gesagt ohne nähere Angaben was Du mit welchen Mitteln (OS, Compiler) machen willst, ist es nicht möglich genauere Tips zu geben

Gruß
Gerhard
 
Hi!

Erstmal muss ich anmerken das ich kein cpp mach. Dafür aber c# und das schon Jahre lang.
Für mich schaut das so aus, als möchtest Du auf ein Control zugreifen das in einem anderen Thread erstellt wurde.
Bei mir ist das nicht möglich. Es entstehen dabei Deathlocks.
Ich muss dafür die Methode, in der ich auf das Control zugreife,
auf dem Thread invoken in dem das Control erstellt wurde.
Dafür benötige ich lediglich ich einen delegate dessen Sigantur der Methode entspricht.

Hoffe ich konnte helfen...
 
Also:
im dialog befindet sich die listbox. neben dem dialog starte ich dann einen thread mit der funktion um nachrichten zu empfangen. aus diesem thread will ich die nachricht dann in dem dialog ausgeben. benutze einen worker-thread. kann des vllt daran liegen ?

Habs auch grade mit einem user-interface thread probiert. geht auch nich. folgender fehler kommt dann immer:
http://people.freenet.de/bilder500/fehler.jpg
 
Zuletzt bearbeitet:
Du hälts Dich ja ganz schön zurück mit Infos:
Also:
1.) Was für Nachrichten möchtest Du abfangen
2.) Ist dieses mit Deinem Thread auch möglich
3.) Wie gibst Du die "Nachricht" aus
4.) Was für einen Fehler erhältst Du
Ansonsten folgender Tip:
1.)Übergebe Deinem Thread das Handle Deines Dialoges
2.)Mit z.B.
CString * csMessages = new CString();
PostMessage(handle,WM_ADDMESSAGE, 0, (LPARAM)s;
kannst Du Deinem Dialog die Message schicken und in die Listbox eintragen.
WM_ADDMESSAGE wäre in diesem Fall eine user defined messages und natürlich musst Du in Deinem Dialog ein entsprechenden Handler einbauen.

Gruß
Gerhard
 
So,

deine Infos sind bissl karg aber schau mer mal.. Also der Workerthread sollte richtig sein aber die Frage ist wie willst du auf das Listelement zugreifen Versuch einfach mal beim starten des Threads als hwnd this zu übergeben. In dem Thread castest du pParam und hast ein Zeigerlein auf dein Dialog. Dann kannste versuchen das Listelement zu manipulieren. Genrell solltest du einfach ein haufen Breakpoints setzen um genau lokalisieren zu können wo es scheppert.



MFG
ToDu

P.s. Rächtschreibfehlersindarbeitsplatzbedingt.
 
ok dann mach ich mal eine, hoffe diesmal, ausführliche fehler beschreibung

ich hab einen Chat geschrieben der nur netzwerkintern geht. in dem thread läuft die funktion um eine textnachricht von einem anderen user zu empfangen (CString nachricht).
und diese CString nachricht will ich dann im dialog bzw der listbox ausgeben.
hier is der fehler der auftauch und dann stürzt das prog ab http://people.freenet.de/bilder500/fehler.jpg .
Ansonsten folgender Tip:
1.)Übergebe Deinem Thread das Handle Deines Dialoges
2.)Mit z.B.
CString * csMessages = new CString();
PostMessage(handle,WM_ADDMESSAGE, 0, (LPARAM)s;
kannst Du Deinem Dialog die Message schicken und in die Listbox eintragen.
WM_ADDMESSAGE wäre in diesem Fall eine user defined messages und natürlich musst Du in Deinem Dialog ein entsprechenden Handler einbauen.
des hört sich ganz gut an. werd mal probieren ob ich des hinbekomm und ob des dann läuft.
hoffe des war ausführlich wenn nich. versuch ichs nochmal
 
gut. nun ein weiteres kleines problem: theorie hab ich verstanden, nur bin ich nicht fähig des umzusetzen. vllt kannst du mir n bissl genauer helfen.
meine dialog klasse heist: CChatDlg
mein thread: UINT Threadproc(LPVOID param)

zum starten mach ich:
AfxBeginThread(Threadproc,&obj.a);

wie benutze ich jetz PostMessage(...) damit ich vom thread an den dialog eine nachricht schicken kann z.b. WM_THREADMESSAGE ?

und wo mach ich was hin. hoffe ihr habt noch ein wenig geduld mit mir.
danke
 

Neue Beiträge

Zurück