Frage : Das RPG-Einfaßungs-Programm, das an hängt, schließen an ()

Zuerst bin ich zur Einfaßungsprogrammierung neu. Ich fand ein großes Tutoron-line-- und ein morgens Code von ihm wiederverwendend. Ich verwende ein Einfaßungsprogramm, um hex Befehle zu einer Produktions-Anzeigetafel zu schicken. Die hex Befehle erhöhen/die Verminderungkostenzähler, usw. auf dem board.

In mein Einfaßungsprogramm, ich schicken die binären/hex Befehle zu den verschiedenen 8 Eingangshäfen für das Brett zum Prozess. In diesem Beispiel benutze ich Software, um den binären Befehl zu senden, Eingang 1 (Gesamtrechnung) zu simulieren. Das Einfaßungsprogramm nach dem Zufall bringt eine Störung zurück, die es nicht an das host.

Ex anschließen könnte:

I kann mein Programm 70x innerhalb einer Minute laufen lassen, oder so und es erhöht den Gesamtkostenzähler 70x. Alles ist fein. Dann aus Nirgendwo heraus, wenn es benannt wird, versucht das Programm, eine Beziehung auf Hafen 4001 herzustellen und es hängt. Es bringt dann eine Störung zurück, die angibt, dass es eine Beziehung zum Wirt innerhalb der Abschaltung period.

As für das Arbeiten/nicht arbeitend, es nicht herstellen könnte aussieht vollständig gelegentlich. Ich kann die Einfaßung herstellen, zu senden, und nah ist die Einfaßung mehrmals und alle fein. Ich kann 3 Minuten dann warten und senden, und das Programm hängt an der Verbindungfunktion. Irgendwelche Ideen?

thanks im Voraus - Adam
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
eval Socke = Einfaßung                       
             (AF_INET: SOCK_STREAM: IPPROTO_IP)

wenn anschließen (Socke: p_connto: ) < 0 addrlen   
eval = irren sich errno                            
callp nah (Socke)                            
callp sterben ('anschließen (): '+%str (strerror (sich irren),)) 
zurückgehen                                           
endif                                            

eval rc = senden (Socke: %addr (activeCmd): 4: 0) 
                                                
wenn rc < 4                                
eval = irren sich errno                           
callp nah (Socke)                           
callp sterben (%str (strerror (sich irren),))              
zurückgehen                                          
endif                                           

eval rc = Recv (Socke: %addr (activeCmd): 4: 0) 
e alles, wenn keine Bytes zurückgingen                 
wenn rc < 1                                
callp nah (Socke)                           
callp sterben (%str (strerror (sich irren),))              
zurückgehen                                          
endif

Antwort : Das RPG-Einfaßungs-Programm, das an hängt, schließen an ()

Bis zu der Reihe NEP, die neu legt, mag ich wirklich den Ton von dem, aber weiß nicht, was es ist.

Traurig… NEP -- Immer währendes Programm.

Im Allgemeinen ist es ein Programm, das Sie beim Durchlauf in irgendeinem Reihensubsystem einreichen und das erwartet, um für immer zu schlingen. (Gut, bis irgendeine Art Befehl oder Signal es erklärt zu beenden.) Sie konnten sie bei der Jobwarteschlange QSYSNOMAX beim Durchlauf wie verschiedenen Bedienerprogrammen einreichen.

Ihr Programm beginnen, indem es den Einfaßungsanschluß öffnete. Dann sitzen es, bei der Aufwartung, dass eine Eintragung auf Daten anstehen ankommt. Wann immer eine Eintragung erschien, senden sie sie über der Einfaßung und gehen zurück, zu sehen, wenn eine andere Eintragung auf der Datenwarteschlange war.

Sie konnte 99.999% seiner gerade wartenden Zeit verbringen. Jede mögliche Zahl von Programmen von anderen Jobs konnte Befehle zur einzelnen Datenwarteschlange schicken.

Bei Bedarf könnte die Datenwarteschlange befestigt werden, damit jeder Befehl einen einzigartigen Bezeichner hatte, möglicherweise abgeleitet vom GENUUID API. Wenn ein Befehl von der Warteschlange gezogen und die Einfaßung aussendete, verwendet die einzigartige Identifikation, um eine Bestätigung durch die Datenwarteschlange zurückzuschicken. Nur der sendende Job wissen, welcher Schlüssel die Bestätigung für ihn war. Die Datenwarteschlange liefern Zweiwegkommunikation zwischen Ihren Jobs und Ihrem „Einfaßungsbediener“.

Wenn das Volumen soviel war, dass Ihr Bediener nicht aufrechterhalten könnte, beginnen Sie einfach zweites.

Der „Einfaßungsbediener“ haben alles, das benötigt, um Ihre Einfaßungsarbeit zu erledigen. Er haben keine Komplikationen vom Müssen die Befehle von der Datenwarteschlange verstehen -- er sendet gerade, was auch immer zeigt. Die Logik fokussiert in freundlich getrenntem proc, in Modulen und in Programmen halten -- ordentliche Arbeitsteilung.

Ihre „Klientenprogramme“ sind auch einfach. Aller, den sie tun, ist Handgriff die passenden Befehlsfolgen und schickt sie zur Datenwarteschlange. (Beliebig, ist es eine Zweiwegdatenwarteschlange; aber die konnte eine neuere Verbesserung sein. Es Arbeit bilden, dann sie besser bilden.)

Wenn Sie nicht Datenwarteschlangen benutzt, sollten Sie sie viel einfacher finden als Einfaßungen.

Tom
Weitere Lösungen  
 
programming4us programming4us