Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Konzept: Abfrage von Informationen von entfernten Rechnern

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
10.07.2005, 13:07 Uhr
~Richard
Gast


Hi Forum,

bin neu hier und beschäftige mich erst seit kurzem mit Windowsprogrammierung. Ich habe eine Konzeptfrage zur Abwicklung von Kommunikation zwischen entfernten Rechnern und dem Zusammenführen der Antworten.

Ich möchte ein Windowsprogramm erstellen, das Daten von entfernten Rechnern einsammelt. Die Übertragung dorthin und das in empfangnehmen der Antworten ist mir klar - dafür verwende ich eine genau dafür entwickelte .dll. Ich schicke also meine Anfrage an diesen Rechner, der mir daraufhin seine Antwort zurückschickt. Die Antwort erhalte ich indem ich z.B. alle paar hundert Millisekunden (Timer) eine Funktion dieser Dll aufrufe, die mir dann u.a. auch die gewünschte Antwort liefert. Nach dem Absenden der Anfrage kann ich ja nicht aktiv aufs Eintreffen der Antwort warten, da solange ja die Oberfläche "blockiert" wäre und der Benutzer nix anderes machen könnte. (Verständlich formuliert?).

Oder anders ausgedrückt. Ich würde gerne sowas machen:
SendeAnfrage(Parameter);
While(AntwortEingetroffen) {};
label.Text="Antwort1";
SendeNächsteAnfrage();
While(AntwortEingetroffen) {};
label.Text2="Antwort2";
SendeNächsteAnfrage();
While(AntwortEingetroffen) {};
label.Text3="Antwort3";
...

Wenn ich mit Threads programmieren würde, dann hätte ich auch den Bezug innerhalb dieser Kommunikationsfolge verloren, da der Sendethread und der Empfangsthread ja so programmiert, eigentlich nichts miteinander zu tun hätten?!?
Wie setzt man diese dennoch in Beziehung?
Eigentlich müsste sowas ja ein Standardproblem sein - wie löst man sowas, bzw. wo finde ich weitere Infos hierzu?

Ich programmiere mit C# und VisualStudio .net.

Danke, Richard
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.07.2005, 13:18 Uhr
Skippy



ja es gibt die möglichkeit das ein threat auf das ergebnis oder beenden eines anderen threats wartet bzw das man mehrere threats synchronisieren kann (schau mal in google "threats synchronisieren c++") da wirst schon einiges finden

aber wenn ich dich richtig verstanden habe möchtest du ja nicht das senden und empfangen in extra threats haben sondern die oberfläche vom sammeln der informationen abkoppeln oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.07.2005, 00:21 Uhr
ao

(Operator)



Zitat von ~Richard:
Wie setzt man diese dennoch in Beziehung?

Indem man mit der Anfrage ein Kennzeichen mitschickt, z.B. eine eindeutige Nummer. Der entfernte Rechner kopiert die Nummer in seine Antwort, und so weißt du, zu welcher Anfrage eine eintreffende Antwort gehört.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.07.2005, 17:58 Uhr
~Richard
Gast


Hallo ihr beiden,

ich glaube das mit dem Thread synchronisieren ist eigentlich garnicht notwendig?!
Und ein Kennzeichen brauche ich nicht mitschicken, denn ich kann anhand der Antwort erkennen, daß diese Antwort auf meine Anfrage paßt.

Jetzt kam mir eine andere Idee, die eigentlich funktionieren müßte. Bitte um Kommentar, ob man das als "Windowsprogrammierer" auch so macht und ob das ein gescheites Konzept oder Murks ist. (Ich komme eher aus der Embedded/Mikrocontroller-Programmierung).

1.) Es gibt einen Thread, der alle empfangenen Antworten entgegen nimmt und in eine Queue einreiht. Sonst nix.
2.) Benutzer klickt auf Button. Die zugehörige Button-Klick-Funktion startet einen/den Timer.
3.) Der Timer löst irgendwann (z.B. nach 50ms) aus und lädt sich wieder nach, sodaß er nachfolgend alle 50ms auslöst. In der Timerfunktion selbst ist eine Statemaschine. Diese ist so aufgebaut:
a. Anfrage verschicken
b. Überprüfen, ob bei den vom (1) Thread empfangenen Antworten DIE richtige dabei ist
c. Wenn nein, dann Statemaschine beenden und beim nächsten Durchgang (also nach weiteren 50ms) erneut prüfen.
d. Wenn ja, dann die gerade empfangenen Daten aufm Bildschirm ausgeben.
e. nächster State - im Prinzip wiederholen sich ab jetzt die Schritte a. bis d.
f. Abfolge abgearbeitet, Timer stopp sich selbst, o.ä.

Das sollte so prinzipiell funktionieren?!


Weitere Frage: Wie teilt die Button-Klick-Funktion meiner Timer-Statemaschine mit, daß da jetzt was anliegt, d.h. wie macht man so eine Schnittstelle. Aus embedded Sicht würde ich da ne globale Variable machen, in die ich diese Infos reinschreibe, so im Stile:
#define AnfragenBlock1Abarbeiten 0x01
TriggerTimerStatemaschine=AnfragenBlock1Abarbeiten;
Und das dann im Timer abfragen.

Mein Bauchgefühl sagt mir, daß man sowas aus Windows/OO-Sicht nicht macht. Wie macht man das aber besser? Kurzer Hinweis auf Konzept, oder ein paar Stichworte genügen mir.

> [...] oberfläche vom sammeln der informationen abkoppeln [...]
Das wäre ja durch mein oben beschriebenes Konzept ja schon erreicht.


Danke, Richard
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: