Mherere Threads aufrufen ?



  • ich danke Dir,

    wie mache ich es aber, dass ich das Dynamisch mache ?
    Ich habe eine Liste mit Servern (eine id int).

    jetzt möchte ich einen thread auslösen vom server 1. (start)
    die anderen Server sollen aber nicht gestartet werden.

    Wird eben so, immer nur der Server der ausgewählt wurde soll gestartet oder gestopt werden, und nicht alle die in der Liste stehen...

    Gruß
    andy_mann



  • Ich löse das meistens so:

    class server
    {
    public:
    integer id;
    CDerDialog * derDialog;
    Server();
    void StartThread();
    void StopThread();
    private:
    CThread * thread;
    }
    
    server()
    {
     thread = NULL;
    }
    
    void server::StartThread()
    {
     if(thread == NULL)
     {
      thread = AfxBeginThread(StartLogfile, this);
     }
     else
     {
      thread.ResumeThread();
     }
    }
    
    void server::Stopthread()
    {
     if(thread != NULL)
     {
      thread.Suspend();
     }
    }
    

    In DerDialog habe ich dann ein CArray von Server,wo ich mir dann den Server mit der ID die ich starten will raussuchen.



  • Vielen Dank,

    muß das therad nicht Global sein ??

    Sonst wird es doch beendet, wenn der Dialog schließt ??

    Gruß
    andy_mann



  • Die Threadfunktion ist doch noch global,wo ich den Zeiger auf den Thread aufhebe hat keinen Einfluss darauf wann der Thread endet.Natürlich stürtzt der Thread ab,wenn er versuch auf einen Dialog zuzugreifen der nicht mehr dar ist,aber das war bei deinen vorherigen Entwurf genau so.



  • Bevor ich es vergesse deine Funktionen muss du so umbauen:

    UINT StartLogfile(LPVOID pParam) 
    { 
        Server * pServ = (Server*) pParam; 
        ppServ->derDialog->threadStart(ppServ->Id); 
    
        return 0;    
    } 
    
    void CDerDialog::threadStart(int id) 
    { 
        CDerDialog m_CDerDialog; 
        while (m_Flag) 
        { 
            cs.Lock(); 
            Sleep(1000); 
                      // dies ist die Funktion die das File durchsucht 
                      // 1 ist die Server ID 
            m_CDerDialog.aufrufFunktionServer(id); 
    
            cs.Unlock(); 
        } 
    }
    


  • Hallo,

    Ist Server und CThread bei Dir eine eigens erstellte Klasse ??

    Gruß
    andy_mann



  • server ist eine einfache die einen Zeiger auf deinen Dialog,die ID deines Servers und einen Zeiger auf den Thread in den diese Daten verarbeitet werden enthält.
    CThread sollte eigentlich CWinThread sein,das passiert schon mal wenn man sowas aus den Gedächnis schreibt.



  • Hallo,

    was meinst Du mit

    server ist eine einfache
    

    Klasse oder ??

    steht dieses dann in der klasse server ?

    void server::StartThread()
    {
     if(thread == NULL)
     {
      thread = AfxBeginThread(StartLogfile, this);
     }
     else
     {
      thread.ResumeThread();
     }
    }
    
    void server::Stopthread()
    {
     if(thread != NULL)
     {
      thread.Suspend();
     }
    }
    

    Gruß
    und Danke
    andy_mann



  • Ja zu beiden Fragen



  • Ich krige das Ding nicht zum laufen...

    Nur fehler..

    wo muß deiner meinung nach die Globale Funktion

    UINT StartLogfile(LPVOID pParam) 
    { 
        Server * pServ = (Server*) pParam; 
        ppServ->derDialog->threadStart(ppServ->Id); 
    
        return 0;     
    }
    

    Gruß
    andy_mann



  • Hallo,

    kann mir vieleicht jemand sagen warum ich folgenden fehler bekomme ??

    error C2065: 'IDD_LIZENZEN' : nichtdeklarierter Bezeichner

    IDD_LIZENZEN ist mein Dialog.

    Wenn ich oben aufgeführten Code raus lasse, ist alles in ordnung.

    Gruß
    andy_mann



  • Hallo,

    andy_mann schrieb:

    error C2065: 'IDD_LIZENZEN' : nichtdeklarierter Bezeichner

    du hast #include "resource.h" vergessen

    Grüße Rapha



  • Hallo Rapha,

    vielen Dank, das hat sehr geholfen..

    jetzt habe ich allerdings nochmal einen Fehler..

    error C2143: Syntaxfehler : Fehlendes ';' vor '*'
    error C2501: 'CLizenzenDialog' : Fehlende Speicherklasse oder Typbezeichner

    #include "LizenzenDialog.h" habe ich eingebracht.

    Finde den Fehler nicht...

    Gruß
    andy_mann



  • Das liegt normalerweise an der nicht includierten "LizenzenDialog.h" (was bei dir ja nicht der Fall ist).
    Dann kann es sein, dass die Klasse CLizenzenDialog nicht richtig deklariert wurde (vielleicht hast du das ; nach "class CLizenzdialog {...}" vergessen oder in der Klasse eine Klammer zuviel geschrieben)

    Poste mal etwas mehr Code/Fehlermeldungen.

    Grüße Rapha



  • Hallo Rapha,

    ich danke Dir,

    wie es aussah, hat
    #include "afxtempl.h"
    gefehlt.

    Jetzt teste ich gerade, läuft allerdings noch nicht so wie ich will.

    Gruß
    andy_mann



  • so, jetzt glaube ich dann an geister....... 😞

    nach dem ich oben den Artikel geschrieben hatte, einen Satz kopiert hatte, kam der selber fehler wieder...

    error C2143: Syntaxfehler : Fehlendes ';' vor '*'
    error C2501: 'CLizenzenDialog' : Fehlende Speicherklasse oder Typbezeichner
    error C2501: 'm_cLizenzenDialog' : Fehlende Speicherklasse oder Typbezeichner

    ich habe auch schon nach gesehen, ob ich die include anweisung ausversehen verschoben hatte, war aber noch da.

    So und nun ??
    Ich kann auch die einzelnen Dateien Kompilieren, keine Fehler.
    Beim erstellen fehler....

    Mensch, gibt es denn keine Lösung für mein Problem oder muß ich mir erst 1000000000000 Bücher durchlesen um anschließend mit 10000 Jahren einen Pobligen Code zu schreiben ??????? 😡

    Gruß
    andy_mann



  • 😃
    Das #include "LizenzenDialog.h" MUSS in die die Headerdatei, in der die Klasse deklariert wird, die 'm_cLizenzenDialog' als Membervariable hat.
    Bist du sicher, dass das der Fall ist?

    Grüße Rapha



  • Vielleicht bin ich auch Blind.....

    // ServerThread.h: Schnittstelle für die Klasse ServerThread.
    //
    //////////////////////////////////////////////////////////////////////
    
    #if !defined(AFX_SERVERTHREAD_H__EA24D7BF_3663_4309_AF14_6BCE869F73A1__INCLUDED_)
    #define AFX_SERVERTHREAD_H__EA24D7BF_3663_4309_AF14_6BCE869F73A1__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #include "resource.h"
    #include "afxtempl.h"
    #include "LizenzenDialog.h"
    
    class ServerThread  
    {
    public:
    	int id;
    
    	CLizenzenDialog* m_cLizenzenDialog; 
    
    	void StartThread(); 
    	void StopThread();
    
    	ServerThread();
    	virtual ~ServerThread();
    
    private:
    	CWinThread* thread;
    
    };
    
    #endif // !defined(AFX_SERVERTHREAD_H__EA24D7BF_3663_4309_AF14_6BCE869F73A1__INCLUDED_)
    

    Gruß und vielen Dank
    andy_mann



  • Ist die Lizenzdialogklasse ok (d.h. kannst du den Dialog starten)?
    Sonst könntest du noch versuchen ein

    class CLizenzenDialog;
    

    vor die deklaration der Klasse zu schreiben.

    Grüße Rapha



  • Hallo Rapha,

    vielen Dank für dein Bemühen.

    Mit dem eintrag von

    class CLizenzenDialog;
    

    funzt es wieder......

    Gibt es auch eine erklärung wieso 😕

    Gruß
    andy_mann


Anmelden zum Antworten