Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » pollen von pipes

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
28.05.2010, 12:24 Uhr
~DerBoB
Gast


alloah,
ich habe ein Programm geschrieben, das momentan nur in der Konsole läuft. Es steuert eigentlich nur eine Relaikarte über die serielle Schnitstelle. Die Relais werden in bestimmten Sequenzen geschaltet. Gibt man eine 1 ein so wird Sequenz 1 ausgeführt und gibt man eine 2 ein wird Sequenz 2 ausgefüht. Die Eingabe wird mittels kbhit ( ) und getch ( ) ausgewertet.

C++:
char c;
{
    while (c != 'q')%
    {
        if (kbhit())
        {
            c = getch()
            //weitere Auswertungen
            }
        }
    //weitere Steurung
    Sleep (1 )
    }
}

So weit funktioniert es wunderbar. Jetzt möchte ich das Programm aber nicht mehr über die Konsole sondern über ein Interface, das in Python geschrieben ist steuern. Das müsste ja am einfachsten per pipes funktionieren. Leider tut es das nicht. Ich denke mal das Problem ist die Funktion kbhit, da ja keine Tastautur eingabe stattfindet. Hat jemand ne andere Idee wie ich meine Eingabe pollen kann? Auf Threads wollte ich eigentlich verzichten.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.05.2010, 12:45 Uhr
ao

(Operator)


Wenn das Programm sonst nichts tut und nur aktiv werden muss, wenn ein Befehl eintrudelt, dann kannst du einfach blockierend aus der Pipe lesen, also etwa so (Pseudocode):


C++:
while (true)
{
    readpipe (&command); // bleibt stehen, bis ein Kommando aus der Pipe kommt
    process (&command);  // verarbeitet das Kommando.
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.05.2010, 12:53 Uhr
~DerBoB
Gast


Tschuldigung das habe ich vergessen zu erwähnen. Es muss noch jede hunderstel sekunde die eingänge an meiner Karte auslesen. Deswegen darf es nicht blockieren.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.05.2010, 15:50 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,

nimm fcntl und setz den stdin auf nonblocking:

fcntl(STDIN, F_SETFL, O_NONBLOCK)

und benutz dann fread o.ä um davon nichtblockierend zu lesen
--
class God : public ChuckNorris { };

Dieser Post wurde am 30.05.2010 um 15:51 Uhr von FloSoft editiert.
 
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: