2017-01-26 2 views
1

Ich verwende eine C# -Klasse mit einer seriellen Funktion, um meine Anwendung mit einer CNC-Maschine zu verbinden - das Projekt ist ein MDI.
Q: Wie serialisierte Parallelverbindung mit FIFO-Warteschlange?

Die serielle Funktion wird von verschiedenen untergeordneten Formularen aufgerufen (es gibt 5 davon).

In einer anderen Klasse, die zum Behandeln von Verbindungen erstellt wird, erstelle ich eine FIFO-Warteschlange zum Verwalten der Anfragen von den untergeordneten Formularen.

Die untergeordneten Formulare kommunizieren über den Socket mit der Verbindungsklasse. Ist das eine gute Idee?
Wenn nicht, gibt es eine andere Methode, dies zu tun? Bei diesem Modus

Ich denke:

private struct s_fifoObj 
    { 
     public int priority; //Priority of serial command 
     public DateTime data; // Date of command 
     public string from;  // That form send the comand 
     public string cmd;  // the command (request) 
     public int status;  // status of command 
    } 

    private Queue<s_fifoObj> q_fifoObj; 
+0

Ich ändere meine Frage und den Beitrag ... – Tarma

Antwort

1

Gibt es einen Grund, warum Sie Sockets Kommunikation zwischen den untergeordneten Formularen und dem Verbindungs-Handler verwenden? Sie könnten eine Instanz Ihres Verbindungshandlers im übergeordneten MDI-Fenster erstellen und diese dann an den untergeordneten Windows-Konstruktor übergeben. Oder Sie könnten Ihren Verbindungshandler zu einem singleton

Machen Sie eine Warteschlange? Wenn Ihre Anwendung single threaded ist, benötigen Sie keine Warteschlange. Wenn Sie mehrere Threads/Tasks verwenden oder asynchrone Funktionen verwenden, wird ein FIFO funktionieren, aber stellen Sie sicher, dass in System.Collections.Concurrent oder einem anderen Thread, der Thread-sicher ist, ConcurrentQueue sicher ist.

+0

Danke für die Antwort ... das Projekt ist Multi-Threads ... Ich denke, die Steckdose zu verwenden, weil ich annahm, dass die Formen unabhängig voneinander sind ... – Tarma