Thread und MFC



  • Hi Leute,

    ich habe mit dem Klassenassistenten eine Threadklasse CMyThread erstellt und von CWinThread abgeleitet. Nun möchte ich dem Konstruktor der Klasse einige Parameter übergeben. Hab also den Konstruktor in der h Datei erweitert und als public deklariert. Jetzt erhalte ich aber immer die Fehlermeldung:

    error C2512: 'CMyThread': Kein geeigneter Standardkonstruktor verfügbar
    Es scheint mit dem DECLARE_DYNCREATE(CMyThread) und dem
    IMPLEMENT_DYNCREATE(CMyThread, CWinThread) zusammenzuhängen. Entferne ich diese Zeilen, erhalte ich die Fehlermeldung nicht genügend Speicherplatz.

    Gibt es noch eine andere Threadklasse, die ich entsprechend erweitern kann.
    Könnt Ihr mir helfen?

    Danke für eure Hilfe.

    Grüße
    xthing


  • Mod

    DECLARE_DYNCREATE benötigt einen default constructor. Lass den alten Konstruktor drin und lege einen neuen an. Oder ändere DECLARE-/IMPLEMENT_DYNCREATE in DECLARE-/IMPLEMENT_DYNAMIC!



  • Danke für die Antwort.

    Ich habe einen zweiten Konstruktor angelegt. Wenn ich jetzt aber den thread aufrufen will, also mit

    CThread thread(m_edit.GetSafeHwnd());

    anlege, wird zwar der Konstuktor durchlaufen, aber kein Thread angelegt. Wie muss ich die CThread aufrufen um den Thread zu starten? Da ich einen Wert dem Konstruktor übergeben will, kann ich

    AfxBeginThread(RUNTIME_CLASS(CThread));

    nicht verwenden. Es wird auch nicht die CThread Memberfunktion

    BOOL CThread::InitInstance()
    {
    {

    durchlaufen, die normalerweise als erstes angesprungen wird.

    CThread wurde mit dem Klassenassistenten erstellt und von CWinThread abgeleitet.

    Mit welchen Parametern muss ich AfxBeginThread aufrufen, wenn ich dem Konstruktor noch Parameter mitgeben will?

    Danke noch mal.

    Grüsse
    xthing



  • Hi,

    ich hab die Lösung gefunden:

    Ich erzeuge das Threadobjekt über den Konstruktor:

    CThread* thread = new CThread(10, this, str1, 1);

    und starte den Thread mit:

    thread->CreateThread(0,0,0);

    Grüsse
    xthing



  • hey xthing kannst du mir etl. dein code on CThread mal schicken? vll. kann ich mir was abschaun.. grüße


  • Mod

    xthing schrieb:

    ich hab die Lösung gefunden:

    Ich erzeuge das Threadobjekt über den Konstruktor:

    CThread* thread = new CThread(10, this, str1, 1);

    und starte den Thread mit:

    thread->CreateThread(0,0,0);

    Das ist nicht die Lösung! AfxBeginThread macht mehr!
    Verwende die entsprechenden Makros!


Anmelden zum Antworten