Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » ReadFile

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
20.06.2005, 10:58 Uhr
ollik



Hier ist mal ein Beispiel Code, so wie er aussehen koennte.
Nach dem 10. Schreiben bleibt der bei ReadFile haengen, solange bis
man wieder mit WriteFile schreibt. ReadFile soll aber weiterhin pruefen
ob Zeichen anliegen. Gibt es eine Loesung (nonBlocking?).


C++:
#include <stdio.h>
#include <windows.h>

HANDLE watch_dog[2];
char   data[1] = "\0";
int    maxlen = 1;

int pipe(HANDLE Handle[2])
{
  SECURITY_ATTRIBUTES saAttr;

  saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
  saAttr.bInheritHandle = TRUE;
  saAttr.lpSecurityDescriptor = NULL;

  if (! CreatePipe(&Handle[0], &Handle[1], &saAttr, 0))
    return(EOF);

  return(TRUE);
}

int WritePipe(void)
{
  DWORD ret = 0;
  static int task = 0;

  if (task < 10)
  {
    if (! WriteFile(watch_dog[1], data, maxlen, &ret, NULL) || ret == 0)
      return(FALSE);

  ++task;
  }
  return(ret);
}

int ReadPipe(void)
{
  DWORD ret = 0;

  if (! ReadFile(watch_dog[0], data, maxlen, &ret, NULL) || ret == 0)
    return(FALSE);

  return(ret);
}

DWORD main(void)
{
  DWORD ret = 0;

  if (pipe(watch_dog) < 0)
  {
    printf("Pipe konnte nicht erstellt werden\n");
    return(FALSE);
  }

  while(1)
  {
    Sleep(1000);
    printf("Schreibe Wert: %d\n", ret = WritePipe());
    ret = 0;
    printf("Lese     Wert: %d\n", ret = ReadPipe());
  }
return(FALSE);
}  




Der Code soll spaeter fuer ein watchdog dienen.

mfg Olli.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.06.2005, 14:07 Uhr
Mr. T



Du könntest das ReadFile() mit Timeouts praktisch wieder "entblocken", wenn kein Zeichen innerhalb Zeit "x" angekommen ist.
Aber ob das im Sinne des Erfinders ist...
--
So ist das!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.06.2005, 13:58 Uhr
ollik



Das funktioniert anscheind nur mit den COM-Schnittstellen, mit PIPE habe ich
keine erfolge erzielen koennen.

mfg Olli.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.06.2005, 14:34 Uhr
ao

(Operator)



Zitat von ollik:
Das funktioniert anscheind nur mit den COM-Schnittstellen, mit PIPE habe ich
keine erfolge erzielen koennen.

Mit "Unnamed pipes" nicht, das ist wohl richtig. Aber lies mal bei "Named pipes" nach, vielleicht sind die besser.

Oder, wenn es nicht unbedingt Pipes sein müssen, kommst du vielleicht mit Events weiter. Jedem überwachten Thread einen Event zuordnen und mit dem Wächter-Thread zyklisch alle Events prüfen: WaitForMultipleObjects mit bWaitAll = true und passend gewähltem Timeout
 
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: