Manuelles ausführen von message-Pumpe in C++

URSPRÜNGLICHE FRAGE

Unsere Anwendung verwendet CSocket-was braucht die message pump laufen, um für Sie zu arbeiten. Es ist derzeit nicht praktikabel ist, ändern Sie zu einem anderen socket-Implementierung, aber das ist, wo möchten wir am Ende irgendwann.

Die Anwendung ist in Visual C++ (NICHT verwaltet).

Wir starten derzeit die C++ - DLL mit einer C#.NET service launcher, startet einen thread mit einer Bewerbung.Ausführen, erhalten Sie die Nachricht, die Pumpe laufen zu lassen, und verwendet dann DllImport Feuer aus der start-Methode in unseren DLL.

Es gibt zahlreiche Probleme mit diesem, die dringendste davon ist, dass, wenn die DLL aus irgendeinem Grund ausfällt, die wir nicht bekommen, eine dump-Datei!

Als Ergebnis dieser, wir sind der Wechsel zu einer C++ - service-launcher, und während wir zufrieden sind mit der service-Aspekt sind wir ein bisschen ratlos, wie man den message-Pumpe in Gang.

Ich hatte einen Blick rund um google und einige Fragen hier, aber ein Teil meines Problems ist ein Mangel an grundlegenden C++ Kenntnisse, also entschuldige mich, wenn dies ist ein dupe Frage, ob jemand kann mich in die richtige Richtung, das wäre sehr geschätzt werden.

Vielen Dank im Voraus
Matt Peddlesden

MEHR INFORMATIONEN

In der aktuellen C# - Dienst, dass wir versuchen, Sie zu ersetzen, bedeutet im wesentlichen dies:

public void PumpThread()
{
    DLLStart();
    Application.Run();
}

protected override void OnStart(string[] args)
{
    try
    {
        Thread pumpThread = new Thread(new ThreadStart(PumpThread));
        pumpThread.IsBackground = true;
        pumpThread.Start();
    }
    catch (DllNotFoundException dnfe)
    {
    }
    catch (Exception e)
    {
    }
}

protected override void OnStop()
{
    try
    {
        DLLStop();
    }
    catch (DllNotFoundException dnfe)
    {
    }
    catch (Exception e)
    {
    }
}

Im wesentlichen sind wir einfach versuchen, ersetzen Sie das obige C# .NET Windows-Dienst mit C++ - äquivalent, so dass unser code ausgeführt wird, komplett in die unmanaged Welt eher als unnötig verwirrend diese mit 5 Zeilen managed code.

DLLStart() und DLLStop() sind zwei Funktionen, die importiert werden, aus unserem C+ nicht verwaltete DLL, die tatsächlich starten und stoppen Sie das system.

Ich bin mir nicht ganz sicher, was Art von Visual C++ - Projekt wäre dies sein müssen, um der Lage sein, etwas zu tun mit der Pumpe entweder um ehrlich zu sein.

Hoffen, dass diese zusätzlichen Daten ist nützlich.

Schreibe einen Kommentar