Hallo Jungs,
ich starte z.B. 3 Threads über den VI Server; siehe nächstes Snippet.
[
attachment=34977]
Nun wollte ich die (z.B. 3) Schleifen synchronisieren. Dazu habe ich mir eine FGV gebastelt: die kann 1) ein Rendevous erstellen 2) auf eins Warten 3) das Rendevous wieder eliminieren. Die Referenz sitzt in nem SR - FGV halt ...
Ging nicht - hab immer'n Timeout bekommen. Das ganze nochmal mit Occurrences probiert - selbes Problem.
Frage: Muss ich die Ref erst mit der richtigen Option öffnen (wenn ja, wie denn?), oder was geht da schief?
[
attachment=34978] so?
(Ich weiß probieren geht über studieren - würd aber lieber zwei Sätze zu hören bevor ich rate.)
Gruß
Jetzt starte ich die VIs so:
[
attachment=34986]
Zu deinem Hinweis:
- Wieso starte ich die stat. Ref mehrmals? Versteh ich nicht.
Zum Link:
- Muss die VI Ref strict sein?
- Ich will garkeine ablaufinvariante Ausführung ... also einfach keine "8" anschließen?
Is glaub'sch zu hoch für mich ... jedenfalls funktionieren die FGV eigentlich soweit alle - nur die Sync Funktionen bringen immer nen Timeout. Raff ich nicht. Ich versuch heut abend mal ein Beispiel zu erstellen ... vielleicht werde ich ja selbst auch schon daraus schlau.
Gruß
Danke mac
(01.08.2011 10:41 )dimitri84 schrieb: [ -> ]Jetzt starte ich die VIs so:
Zu deinem Hinweis:
- Wieso starte ich die stat. Ref mehrmals? Versteh ich nicht.
Zum Link:
- Muss die VI Ref strict sein?
- Ich will garkeine ablaufinvariante Ausführung ... also einfach keine "8" anschließen?
Is glaub'sch zu hoch für mich ... jedenfalls funktionieren die FGV eigentlich soweit alle - nur die Sync Funktionen bringen immer nen Timeout. Raff ich nicht. Ich versuch heut abend mal ein Beispiel zu erstellen ... vielleicht werde ich ja selbst auch schon daraus schlau.
Sind die verschiedenen "Threads"/Schleifen denn unterschiedliche VIs? Ich bin von einem VI ausgegangen, das du mehrmals starten willst und das gleichzeitig läuft.
Warum stict:
"Das stellt sicher das alle SubVIs (auch die aus der <vi.lib>) in der Exe enthalten sind und das VI selbst ausführbar ist (deshalb die strikte VIRef Konstante)"
Wenn es nicht reentrant sein soll, dann brauchst du auch keine neue Referenz per VI Ref Open erstellen.
Wenn du _in_ der einen globalen Instanz der FGV wartest, wirst du immer in den Timeout laufen, da alle anderen Aufrufer der FGV, darauf warten erstmal "in" die FGV zu kommen, also garnicht erst zum Rendevous Wait kommen.
(01.08.2011 10:48 )macmarvin schrieb: [ -> ]Sind die verschiedenen "Threads"/Schleifen denn unterschiedliche VIs? Ich bin von einem VI ausgegangen, das du mehrmals starten willst und das gleichzeitig läuft.
Ja, sind unterschiedliche VIs: 2 Counter Tasks und ein AI Task. Jetzt hatte ich folgendes vor: Der AI Task holt immer feste Blöcke und feuert direkt im Anschluss eine Occurence. Die Schleifen vom Counter warten auf die Occurence.
(01.08.2011 10:48 )macmarvin schrieb: [ -> ]Wenn du _in_ der einen globalen Instanz der FGV wartest, wirst du immer in den Timeout laufen, da alle anderen Aufrufer der FGV, darauf warten erstmal "in" die FGV zu kommen, also garnicht erst zum Rendevous Wait kommen.
Jetzt wo du es sagst, fällt's einem wie Schuppen von den Augen. Das war's!
Also einfach Ref rausgeben und draußen warten. Ich probier's.
EDIT: Das war's: einfach draußen warten.
(01.08.2011 10:48 )macmarvin schrieb: [ -> ]Warum stict:
"Das stellt sicher das alle SubVIs (auch die aus der <vi.lib>) in der Exe enthalten sind und das VI selbst ausführbar ist (deshalb die strikte VIRef Konstante)"
Also die stat. Ref (egal ob strict oder nicht) garantiert, dass der Compiler die VIs mitnimmt. Und "strict" garantiert, dass das VI ausführbar ist. Richtig so?