INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Umfrage: Ist diese Library was f
Ja, ich bin sehr beeindruckt
Sehr sch
[Zeige Ergebnisse]
 
Antwort schreiben 

Tasking Library



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

18.03.2009, 11:49 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2009 12:14 von eg.)
Beitrag #36

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Tasking Library
Ok, ich muss nun zugeben, dass man auch mit FGVs größere Programme ohne Race Conditions erstellen kann. Man muss nur anders denken und vorgehen, als "normal".

Ich erzähle mal kurz wie die Tasking Library entstanden ist.
Je mehr Erfahrung ich beim Programmieren gesammelt habe, umso größer war meine Begeisterung, was die Sync Palette (+User Events) so alles kann. Nun habe ich fast alle Sync Tools in meinen Programmen benutzt und fast immer auf die selbe Weise. Der Nachrichtentyp war immer Binary-String, damit ich unterschiedliche Daten (ganz wichtig!) zwischen den Tasks austauschen kann. Jede Nachricht bestand aus einem Header + Nutzdaten. Kleines Beispiel (für i2dx) ich will eine Zahl übertragen und ein Stop, hier muss man entweder eine Queue (bzw. Notifier oder User Event) und ein Occurence nehmen. Dabei wird Occurence einen Timeout von 0 haben, ansonsten bleibt die Task kurz hängen, was ich gar nicht will. Es ist hier also besser einen undefinierten Datentyp zu nehmen. Zwar geht dann die Typanbindung verloren, aber man kann es mit dem Typedef leicht lösen.
Der Typ Binary-String (und nicht Variant) ist nicht umsonst da. Erstens ist es mit VISA und TCP/IP und externen DLLs kompatibel und zweitens kann man ganz einfach mit dem Rest Of Binary String beim Unflatten auf den Rest der Daten dynamisch zugreifen. Beim Typ Variant sollte man einen Cluster aus dem Header + weiterer Variant (evtl. sogar mehrmals verschachtelt) machen und entclustern. Ich finde also das Unflatten mit dem Rest viel bequemer.
Weiter geht's. Um es übersichtlich zu halten, habe ich einen Cluster aus Queue (Notifier/User Event)-Arrays gemacht. Man kann auf die einzelne Referenzen zum Abschicken oder Empfangen von Nachrichten einfach mit dem Enum-Typedef zugreifen. Später, als LVOOP kam, habe ich diesen Cluster durch eine Klasse ersetzt.
Mein Ziel ist - eventgesteuertes Programmieren. D.h. ohne Timeouts, Wartezeiten und insbesondere Race Conditions zu programmieren. Es gibt also Datenquellen und Datensenken. Solange alle Datenquellen schweigen, soll im Programm nichts passieren, wirklich gar nichts. Das Programm bewegt sich nicht und frisst 0% CPU. Sobald aber z.B. ein Paket (hier vermisse ich übrigens einen unendlichen Timeout beim VISA Read) über serielle ankommt, wird es direkt (! ohne Verzögerung) verarbeitet und an die Datensenken weitergegeben. Und bis jetzt funktioniert es mit dieser Library.

Noch was zum Verständnis - diese Library ist nichts anderes als ein Warpper für die Sync Palette.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Nachrichten in diesem Thema
Tasking Library - eg - 08.12.2008, 12:49
RE: Tasking Library - railang - 30.10.2013, 22:45
Tasking Library - eg - 08.12.2008, 13:38
Tasking Library - IchSelbst - 08.12.2008, 22:40
Tasking Library - eg - 08.12.2008, 22:44
Tasking Library - eg - 09.12.2008, 02:34
Tasking Library - IchSelbst - 09.12.2008, 20:51
Tasking Library - IchSelbst - 09.12.2008, 20:55
Tasking Library - eg - 09.12.2008, 21:12
Tasking Library - eg - 09.12.2008, 21:20
Tasking Library - IchSelbst - 09.12.2008, 21:42
Tasking Library - eg - 09.12.2008, 22:13
Tasking Library - IchSelbst - 09.12.2008, 22:48
Tasking Library - cb - 09.12.2008, 22:51
Tasking Library - eg - 09.12.2008, 23:48
Tasking Library - macces - 12.12.2008, 08:27
Tasking Library - eg - 12.12.2008, 10:58
Tasking Library - rasta - 13.12.2008, 07:26
Tasking Library - cb - 13.12.2008, 08:58
Tasking Library - eg - 15.12.2008, 23:20
Tasking Library - eg - 15.12.2008, 23:26
Tasking Library - cb - 16.12.2008, 19:23
Tasking Library - macces - 08.01.2009, 11:21
Tasking Library - eg - 08.01.2009, 11:36
Tasking Library - macces - 08.01.2009, 11:46
Tasking Library - rolfk - 09.01.2009, 12:03
Tasking Library - cb - 09.01.2009, 17:24
Tasking Library - macmarvin - 17.03.2009, 09:28
Tasking Library - Achim - 17.03.2009, 09:44
Tasking Library - macmarvin - 17.03.2009, 22:13
Tasking Library - eg - 17.03.2009, 22:25
Tasking Library - macmarvin - 17.03.2009, 23:22
Tasking Library - eg - 17.03.2009, 23:43
Tasking Library - eg - 18.03.2009, 00:00
Tasking Library - macmarvin - 18.03.2009, 00:17
Tasking Library - rolfk - 18.03.2009, 08:12
Tasking Library - eg - 18.03.2009 11:49
Tasking Library - rolfk - 18.03.2009, 14:15
Tasking Library - eg - 18.03.2009, 14:33
Tasking Library - rolfk - 18.03.2009, 15:20
Tasking Library - eg - 18.03.2009, 15:30
Tasking Library - cb - 18.03.2009, 19:43
Tasking Library - rolfk - 19.03.2009, 09:33
Tasking Library - eg - 12.05.2009, 11:59
Tasking Library - cb - 12.05.2009, 12:54
Tasking Library - rasta - 18.05.2009, 13:10

Gehe zu: