Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Warten auf Daten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.07.2003, 17:32 Uhr
domi73



Ich starte einen Thread aus einem Dialog beim anklicken eines Buttons. Mein Thread läuft bis die richtigen Daten als Antwort über RS232 gekommen sind. Die Daten werden in einer Klasse entpack. Jetzt muss ich die Daten im Dialog anzeigen.
Wie kann ich am besten das Programm synchronisieren das er auf die Daten wartet?
Ich habe versucht in der Klasse ein Object vom Dialog zu erzeugen aber das funktioniert nicht. Beim ausführen des Programms ist Dialog noch nicht vollständig erzeugt.
Wie bekomme ich am besten die Daten zum Dialog zurück?

Ich hoffe es ist verständlich genug.
Danke
Dominic
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.07.2003, 17:44 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ich würde folgendes machen: Thread erst in OnInitDialog starten (dann ist der Dialog da sobald der Thread gestartet ist), als LPARAM dem Thread einen Pointer auf deinen Dialog übergeben, mit diesem dann eben auf die Steuerelemente zugreifen (bzw neue Memberfunktionen anliegen die dieses dann für dich erledigen). ggf IsWindow(this->m_hWnd)-Abfragen in diese Memberfunktionen einbauen.
--
class God : public ChuckNorris { };

Dieser Post wurde am 02.07.2003 um 17:45 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.07.2003, 08:57 Uhr
domi73



Das Problem ist, ich starte den Thread wenn ich zB GetVersion-Button anklicke. Wenn die richtige antwort gekommen ist wird der Thread angehalten. So weit so gut.
Ich starte den Thread mit AfxBeginn............. und ResumeThread(). Dann wird im Thread klasse un() aufgerufen.
Wie kann ich dem Thread mein Dialog als Parameter übergeben? Es kann sein, wenn ich im Run() mein Dialog hab, habe ich auch das Problem gelöst.

Danke
Dominic
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.07.2003, 10:14 Uhr
ao

(Operator)



Zitat:
domi73 postete
Wie kann ich dem Thread mein Dialog als Parameter übergeben?


In AfxBeginThread ist der erste formale Parameter die Thread-Funktion und der zweite ein LPVOID, der an die Thread-Funktion durchgereicht wird. Die Thread-Funktion (deklariert als UINT MyThreadFunction (LPVOID pParam) findet ihn dann unter pParam vor.

Da der Parameter LPVOID ist, schluckt er alles, auch einen Dialog.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.07.2003, 10:43 Uhr
domi73



Danke ao,

also ich rufe meine Funktion aus dem Dialog StartThread( this ). In StartThread wird AfxBeginThread aufgerufen.
Kann ich dann in der Thread-Klasse, in der Funktion Run(), pParam benutze bzw. weitergeben?


Schon Gruß
Dominic
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.07.2003, 11:03 Uhr
domi73



Ich versuch besser zu erklären:

In Run() wird eine Funktion aus einer Klasse SerialCom aufgerufen. Da werden die Funktionen Read() und Write() aufgerufen bis der richtige Datenblock kommt. Jetzt habe ich 230 Bytes, in der Klasse SerialCom, die ich an mein Dialog weiterschicken möchte. Im Dialog-Klasse müssen die Daten entpackt und eingeblendet werden.

Dises Prinzip muss für mehrere Dialoge funktionieren.

Habt Ihr einen guten Rat?

Danke
Dominic
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.07.2003, 12:04 Uhr
ao

(Operator)


@domi:
Im Prinzip würde das wahrscheinlich so gehen. Allerdings: Die SerialCom-Klasse hat doch nur die Aufgabe, 230 Bytes zu liefern, oder? Was da drinsteckt und wie es verarbeitet wird, geht SerialCom nichts an.

Wenn du den Dialog bis nach unten durchreichst, schaffst du Verknüpfungen und Abhängigkeiten zwischen Klassen, für die es keinen Grund gibt. Es ist möglicherweise besser, aus SerialCom nur die Datenbytes zu holen und das Entschlüsseln und Anzeigen in der Thread-Klasse zu erledigen.

Wenn morgen jemand entscheidet, daß die Versionsnummer anders dargestellt werden muß, bleibt das auf die Thread-Klasse beschränkt und zieht sich nicht bis ganz unten durch.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.07.2003, 13:12 Uhr
domi73



OK das habe ich verstanden.
Ich finde aber im Moment keine Lösung diese 230 Bytes aus dem SerialCom zu meinem Dialog weiterzureichen.
Ich möchte wenn die richtige Antwort kommt die weitergeben. Allerdings kann ich nicht in SerialCom ein Object der Klasse Dialog implementiren weil mein Dialog beim Start noch nicht vollständig ist.
Ich habe mehrere Karteikartenreiters und die werden nur beim Anklicken erstellt.

Also was nun?

Danke
Dominic
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.07.2003, 14:22 Uhr
ao

(Operator)


@domi:
Ich hab das so verstanden, daß du einen Thread hast, der den Dialog als Parameter mitbekommt und der angestoßen wird durch OnClickGetVersion() oder wie das heißt.

Der Thread macht dann SerialCom.Send ("GetVersion") und SerialCom.Receive (AnswerBuffer), wobei AnswerBuffer ein lokaler Puffer ist, der groß genug ist, um die 230 Bytes Antwort aufzunehmen.

Dann kommt CString sVersion = ExtractVersionFromBuffer (AnswerBuffer) und pDialog->DisplayVersion (sVersion), alles im Thread. ExtractVersionFromBuffer() kennt die Verschlüsselung der Daten im seriellen Datenstrom und kann die Klartext-Versionsnummer wiederherstellen; und DisplayVersion weiß, wo und wie der Text angezeigt werden soll.

Wenn SerialCom sich nur um den Datenaustausch (sprich Transport) mit dem Remotesystem kümmert, braucht es von Dialogen nichts zu wissen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: