Thread geht nicht



  • Hallo.
    Ich bin gerade dabei ein Windows service zu schreiben.

    siehe http://www.c-plusplus.net/forum/viewtopic-var-p-is-1023380-and-highlight-is-.html#1023380
    leider kann ich den link nicht mehr öffnen !??? die seite läd nichtmehr.

    Deswegen mach ich einen neues Thema auf.
    Mein Problem ist, dass ich es nicht hinbekomme einen neuen Threat aus OnStart() heraus aufzurufen.

    server.cpp

    public __gc class ServerThread
     {
     public:
         // The ThreadProc method is called when the thread starts.
         // It loops ten times, writing to the console and yielding 
         // the rest of its time slice each time, and then ends.
         static void ThreadProc()
         {
    		 MessageBoxA(NULL,"Win","W",16);
    
         }
     };
    

    service5.cpp

    #include 
    void OnStart(String* args[])
    {
     oThread = NULL;
     oThread = new Thread(new ThreadStart(0, &ServerThread::ThreadProc));
     // Start the thread.  On a uniprocessor, the thread does not get 
     // any processor time until the main thread yields.  Uncomment
     // the Thread.Sleep that follows t.Start() to see the difference.
     oThread->Start();
     if ( oThread != NULL )
     {
      this->get_EventLog()->WriteEntry("Test","Thread  OK",EventLogEntryType::Information,1200,100);
     }
    }
    
    /// <summary>
    /// Beenden Sie den Dienst.
    /// </summary>
    void OnStop()
    {     
     // TODO: Hier Code zum Ausführen erforderlicher Löschvorgänge zum Anhalten des Dienstes einfügen.
     oThread->Abort();
    }
    


  • Und was geht jetzt nicht? Das hast Du irgendwie vergessen zu scheiben...

    PS: Und der Link kann ich ohne Probleme anzeigen...



  • Hm...bei mir geht der link nicht. Da läsd nur ewig und passiert nix...egal ob ie oder firefox.

    Naja...Das Problem ist, dass die MessageBox nie angezeigt wird. Das einzige was passiert ist, dass "Thread OK" ins systemprotokoll eingetragen wird. Die MessageBox im 2. Thread Kommt aber nicht.



  • Ein Service läuft i.d.R. als "Service", d.h. er hat keine Interaktion mit dem Desktop! Somit wird die MessageBox zwar angezeigt, aber nicht auf Deinem "Consolen-Desktop" sondern auf dem Service-Desktop (den Du nicht siehst)...



  • gibts dann ne möglichkeit dinge aus dem ServerThread in das Systemprotokoll einzutragen ?
    Hab versucht einfach ein neues EventLog element im ServerThread zu ertellen...ohne erfolg.



  • Das einfachste ist, wenn Du Deinen Service mal debuggst... sonst kommst Du vermutlich ausser mit vermutungen nicht weiter...
    http://msdn.microsoft.com/library/en-us/vbcon/html/vbtskdebuggingserviceapplications.asp



  • Hallo,
    kenne mich mit services nicht so aus.
    Wir hatten mal das Problem, dass der Service hing, weil man eine MsgBox als Benutzer nicht gesehen hat. D.h. man konnte sie auch nicht bestätigen.
    Schreib doch mal was in eine Datei und kuck ob das klappt.

    (Sonst gibts manchmal den dummen Fehler das man den Thread zwar anlegt aber vergisst start aufzurufen oder ihn suspended anlegt.)


Anmelden zum Antworten