Entwickler-Ecke

Internet / Netzwerk - Thread direkt anwählen


DelphiNoob - Mi 09.04.03 13:19
Titel: Thread direkt anwählen
Hi,

ich arbeite mit den TCP INDY Komponenten für Server und Client.

Nun habe ich folgendes Problem: Ich möchte gerne einen Thread direkt ansprechen. Soll heissen:

Ich speichere z.b. die Thread ID mit einem Namen in einer Datenbank. Beim drücken auf einen Button soll an den Thread XY (wird ja aus der Datenbank geholt) ein vordefinierter String geschickt.

Nun ist mein Problem, das ich aber nicht weiß wie ich das anstellen soll? Wenn sich jemand anmeldet entsteht ja ein Thread. Beim Anmelden wird ebenfalls durch einen String ein "Name" übermittelt. Das wird wie oben beschrieben dann an einer bestimmten Stelle abgelegt.

Nur wie spreche ich jetzt den Thread an? Plz help! Bin in Sachen TCP der totale Noob! Hab mich mal dazu das Indy Tutorial angeschaut, aber da wird nicht wirklich das gemacht was ich brauche (das Tutorial ist ja nur ein Chat).

Mfg
DelphiNoob


focus - Fr 11.04.03 08:43

hi so wie ich das verstanden habe "spricht" man in der regel mit treads über events und aus dem thread heraus zu anderen z.b. dem main thread über postmessage wenn dir das was hilft... so erzeugst du maximale geschwindigkeit, da du auf deinen jeweiligen partner nicht immer warten musst
gruss
michael


DelphiNoob - Fr 11.04.03 13:30

Das hilft mir leider garnicht, betrifft auch nicht mein oben genanntes Problem.

Wie ich über Thread kommuniziere ist mir klar.


focus - Fr 11.04.03 13:39

DelphiNoob hat folgendes geschrieben:

Wie ich über Thread kommuniziere ist mir klar.


???wieso über? davon habe ich doch garnichts gesagt???
anscheinend hast du entweder meinen beitrag nicht gelesen oder falsch verstanden

Zitat:
Ich möchte gerne einen Thread direkt ansprechen

du wolltest wissen wie ich MIT einem thread kommuniziere, wie man ihn anspricht, ...
Zitat:
ein vordefinierter String geschickt

...ihm infos während seiner laufzeit gibt oder nicht?
...so verstehe ich nämlich deinen ersten beitrag...


DelphiNoob - Fr 11.04.03 13:53

Ich denke hier liegt ein Problem in der Definition von "ansprechen" vor.

Ich habe X Anzahl von Threads. Und X Anzahl von Buttons. Sobald sich ein Client anmeldet endsteht ein neuer Button und (logischerweise) ein neuer Thread.

Gut, jetzt habe ich da X Buttons. Auf jedem Button steht zum Beispiel die IP oder ein Name des PCs / User der sich angemeldet hatte. Wenn ich jetzt auf diesen Button drücke soll über den Thread, der beim Login des Clients erstellt wurde, eine vordefinierte Nachricht geschickt werden. Das ist auch kein Problem (das Schicken), aber wie verknüpfe ich den Thread mit dem Button?

Ersetzen wir mal X gegen 5. Dann haben sich im laufe der Zeit 5 PCs angemeldet, die jeweils ein Button darstellen... wenn ich jetzt auf Button 2 drücke soll eine Nachricht an eben den PC geschickt werden der sich als 2tes angemeldet hat (logisch oder?). Beim 4ten Button eben an den 4ten usw usw usw.

Somit muss ich irgendwie den jeweiligen Thread des angemeldeten PCs bei der erstellung des Buttons verknüpfen und nachher "ANSPRECHEN".
So das ich dann Thread XY aufgerufen habe und über ihn die Message senden kann.

Mfg
DelphiNoob

PS.: Das obige Buttonbeispiel ist nicht entgültig, im endeffekt geht es über Icons in einem ListView, spielt aber keine Rolle, zu vereinfachung nehme ich im Beispiel Buttons.


focus - Fr 11.04.03 14:09

und wo ist das problem in einer orderlist die daten zu hinterlegen, und im buttonclickevent ein setevent(handlelist[x]) zu hinterlegen? der dem jeweiligen thread mitteilt das in der orderlist eine neue nachricht liegt? du schreibst in deinem thread ein waitformultipleobjects und gibst im die ensprechenden eventhandles mit, dann kannst du dem thread nichtnur sagen das er senden soll sondern z.b. auch am ende auf seine beendigung warten?!? wenn du auf sachen wie postmessage anspielst muss ich dich leider enttäuschen die gibt es nur für fenster aber dafür gibt es ja events!!
cu
michael


DelphiNoob - Fr 11.04.03 14:14

Nun, das ganze wirkt auf mich viel zu kompliziert für das was ich machen will.

Meines Wissens nach (was auf dem Gebiet nicht wirklich groß ist) hat jeder Thread eine ID, die ThreadID. Diese kann ich ja speichern. Kann ich nicht darüber einfach den Thread "aufwecken", und ihm mitteilen "jetzt sende variable XY".

Ein Beispielcode wäre vieleicht sehr hilfreich, damit könntest du mir dein Beispiel wohl eher verdeutlichen.

Mfg
DelphiNoob


focus - Fr 11.04.03 14:23

natürlich gibt es eine threadid! und du kannst auch mit <threadname>.Resume;
starten und ihn sich selbst suspendieren lassen wenn du ihn nur dadurch steuern willst. allerdings entsteht so eine totzeit...(zeit in der der thread keine informationen annehmen kann) was meines erachtens verhindert werden muss...:roll: oder nicht??