www.mikrocontroller.net

Forum: PC-Programmierung mySQL - Polling/Interrupt in C?


Autor: JK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

Es geht nun mal wieder um mein Projekt, was ihr hier in der Rubrik 'µC & 
Elektronik' hier nachlesen könnt: "Wohnungssteuerung - Gießroboter"

Und zwar habe ich jetzt soweit das PHP-Skript mit einem Button, welches 
nach dem Klick in die mySQL-Datenbank einen Wert schreibt.
Daraufhin überprüft das C-Programm, ob denn dieser Wert in der 
mySQL-Datenbank vorliegt und schickt dann ein Zeichen über die Serielle 
Schnittstelle an meinen AVR.

Nun ist der nächste Schritt, nicht mehr durch "händisches Polling" 
(indem man das C-Programm desöfteren ausführt und darauf wartet, dass 
auf den Button im PHP-Skript geklickt wurde) die mySQL-Datenbank 
abzufragen.

Und genau darum gehts jetzt :-)

Wie kann ich in meinem c-Programm entweder einen Interrupt auslösen 
lassen, sobald ein bestimmter Wert in der mySQL-Datenbank vorliegt, dass 
er eine bestimmte Subroutine ausführt (z.B. "sende Zeichen über RS232") 
oder wie kann ich "ressourcenschonend" diese mySQL-Datenbank pollen?

Erfahrungsgemäß wäre eine while(1)-Schleife wohl das "einfachste", 
allerdings ist dies mit Sicherheit nicht das eleganteste, da mein 
Programm ja nebenher auch noch Messwerte liefern und diese in eine 
andere mySQL-Tabelle schreiben soll.

Ich bräuchte praktisch einen zweiten Thread, der immer nach dem Zustand 
des mySQL-Wertes schaut, währenddessen aber auch noch Messwerte z.B. vom 
Mikrocontroller entgegennimmt.

Wisst ihr was ich meine?
Leider kenne ich bisher solche Sachen nur aus der Mikrocontroller-Welt, 
beispielsweise beim Tastendruck-Abfragen. Zumal es bei Mikrocontroller 
eben einen Hardware-Interrupt-Eingang gibt.

Wie ist das beim PC?



Vielen Dank!

Gruß
Joh.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leider gibt es soche möglichkeiten nicht im SQL-Standard. Es gibt 
datenbanken dort kann man sich für events registrieren (borland) aber 
für MySql kenn ich nichts. Warum kannst du nicht von dem PHP direkt eine 
Nachricht an das C Programm schicken?

Autor: JK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,

ich möchte es mit mySQL machen, da ich die Messwerte vom Controller 
später sowieso in einer mySQL ablegen möchte. Von daher...

Autor: JK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Werde mal anfangen, mich in die Threadprogrammierung einzulesen.

Werde dann per Thread alle Sekunden einmal auf die DB zugreifen und 
einlesen, ob sich was geändert hat.



Gruß

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JK schrieb:
> ich möchte es mit mySQL machen, da ich die Messwerte vom Controller
> später sowieso in einer mySQL ablegen möchte. Von daher...

das kannst du ja zusätzlich machen und wenn du sie eingetragen hast 
kannst du über einen anderne weg dem C programm eine Nachricht schicken.

Autor: JK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du meinst sozusagen einen Event auslösen, sobald eine Änderung vorliegt?


Wie funktioniert das genau??

Autor: JK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soo...wunderbar :)

Ich habe es geschafft mittels Thread in C :)

Autor: Tim S. (freak_ts) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JK schrieb:
> Werde dann per Thread alle Sekunden einmal auf die DB zugreifen und
> einlesen, ob sich was geändert hat.

Ist zwar schon zu spät:
Für solche Sachen hab ich mir überlegt, die gewünschte Anwendung per PHP 
+ Parameter zu starten. (So ne Art Silent-Switch) Falls das nicht geht, 
weil die App schon rennt, oder nicht nochmal ausgeführt werden darf: 
Eine zweite App schreiben, die von PHP aufgerufen wird, und dann per 
Localhost-Socket oder sonnst wie mit der ersten App kommuniziert und 
etwas aufruft. So hat man nahezu verzögerungsfreie Events, spaart 
Performance, und anstelle von der Localhost-Vebindung, kann es auch ein 
anderer Cluster oder Server sein, wo die erste App rennt!!!

Ich bauch das sehr oft, auch für Haus-Automatisierung.. Gibts noch ne 
andere und vielleicht bessere Idee?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.