27 Stimmen

Schnelles C++ Programm, C# GUI, möglich?

Ich bin dabei, eine Anwendung zu entwickeln, die Daten von einer Zeilenkamera mit etwa 2000 Zeilen (Bildern) pro Sekunde verarbeitet. Für diese Echtzeitanwendung halte ich C/C++ für den richtigen Weg. (Ich bin der Meinung, und andere werden mir zustimmen, dass verwalteter Code für diese Aufgabe einfach nicht geeignet ist).

Ich habe jedoch Folgendes getan sehr kleine MFC oder eine andere C++-GUI. Ich bin wirklich immer zu tun C # GUIs sehr gut, aber.

Daher erscheint es mir natürlich, den datenintensiven Code in C/C++ und die grafische Benutzeroberfläche in C# zu schreiben. Die GUI wird für die Einrichtung/Kalibrierung/Online-Überwachung verwendet (und möglicherweise für die Ausgabe von Daten über UDP, weil das in C# einfacher ist.

Daher möchte ich zunächst einmal wissen, ob jemand der Meinung ist, dass dies der richtige Weg wäre. Auf der Grundlage meiner Programmiererfahrung (gut in Low-Level-C-Algorithmen und High-Level-C# GUI-Design), es fühlt sich einfach richtig.

Zweitens bin ich mir nicht sicher, wie ich es am besten anstellen soll. Ich warf gerade zusammen eine Lösung in VS2005, die einige (extern "C") DLL-Funktionen von einer C#-Anwendung aufruft. Und um sicherzustellen, dass ich es tun konnte, schrieb ich auf einige globale Variablen in der DLL, und lesen Sie aus ihnen:

test.h

int globaldata;
extern "C" __declspec(dllexport) void set(int);
extern "C" __declspec(dllexport) int  get();

test.cpp

extern int data=0;
__declspec(dllexport) void set(int num) {
    data = num;
}

__declspec(dllexport) int get() {
    return data;
}

test.cs

[DllImport("test")]
private static extern void set(int num);

[DllImport("test")]
private static extern int get();

Aufruf von get() y set() richtig funktionieren ( get() gibt die Zahl zurück, die ich an set() ).

Ich weiß, dass man auch eine C++-Klasse exportieren kann, aber muss sie auch verwaltet werden? Wie funktioniert das? Gehe ich das richtig an?

Vielen Dank für Ihre Hilfe!

`** EDIT `**

Zuallererst, DANKESCHÖN für Ihre fantastischen Antworten bis jetzt! Ich bin immer unglaublich beeindruckt von Stack Overflow...

Ich denke, ich hätte nicht unbedingt auf die reine Geschwindigkeit eingehen sollen (diese kann in Prototypen und Benchmarks gemessen werden). Eine Sache, die mir mehr Sorgen bereitet, ist das nicht-deterministische Verhalten des Garbage Collectors. Diese Anwendung würde no eine Verzögerung von 500 ms bei der Durchführung der Müllabfuhr tolerieren.

Ich bin alles für die Codierung und versuchen dies in reinen C#, aber wenn ich vor der Zeit wissen, dass die GC und andere nicht-deterministische .NET Verhalten (?) ein Problem verursachen, ich denke, meine Zeit wäre besser verbracht Codierung es in C/C++ und herauszufinden, die beste C#-Schnittstelle.

0voto

Rahul Punkte 11

Front-End-WP und C++-Backend (pinvoke) sind schnell, aber wenn Sie Ihre GUI-Arbeiten auch auf Threads ausführen, wird Ihr GUI-Thread nicht durch Ihren Hintergrundcode blockiert. Wenn Sie das tun, wird Ihr Programm schneller und leichter aussehen.

-2voto

Brian Punkte 81

Warum Windows? Es hat eine schreckliche Speicherleistung und ein schlechteres Netzwerk im Vergleich zu allen Unixen, die es gibt. Die spezialisierte Erfassung eines Zeilensensors setzt voraus, dass Sie ein Gerät benötigen, das die Rohdaten verarbeitet. Überlegen Sie sich zuerst, ob Sie das richtige Betriebssystem verwenden wollen, denn das wird die anderen Probleme, mit denen Sie zu kämpfen haben, erheblich verringern (ich bin mit Zeilenscannertechnologien sehr gut vertraut).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X