_beginthread mit classen



  • Hallo user!!

    Habe folgendes Problem.

    Ich habe eine Klasse die in der header.h gespeichert ist.

    #ifndef HEAD
    #define HEAD
    class test
    {
       test();
       ~test();
       void thread_shutdown( void* );
    }
    #endif
    

    Ich habe eine main.cpp
    Hier liegt aber das Problem.
    Eigentlich müsste ich doch in _beginthread( pointer->thread_shutdown)
    schreiben. FUNZT aber ned
    FEHLERMELDUNG:
    20 F:\source_code\icp_0_01\main.cpp argument of type `void (carpc::)(void*)' does not match `void ()(void)'

    #include "header.h"
    
    int main()
    {
       test *pointer = new test();
       _beginthread( test->thread_shutdown , 0 , NULL );
    
        alternativ
       //_beginthread( thread_shutdown , 0 , NULL );
    
       while(true)
       cout << "main" <<endl;
    
      return 0;
    }
    

    Ich habe auch eine thread.cpp

    #include "header.h"
    test::test(){}
    test::~test(){}
    void test::thread_shutdown( void *pParams )
    {
    
         while(true)
         cout << "shutdown" <<endl;
    
         return;     
    }
    

    oder ich schreib keine Klasse sondern so in der Form

    #includes
    
    DEKLARATION THREAD
    
    int main()
    {
    
     _beginthread( thread_shutdown , 0 , NULL );
    }
    
    DEFINITION THREAD
    

    so funktioniert es aber ich will es in einer Klasse schreiben !!
    Sollte doch gehen oder ??

    Doch wie übergebe ich den Thread funktionsnamen der _beginthread() richtig ???

    Hat jemand eine AHNUNG ?? Oder TIPP



  • Falsches Forum; _beginthread kannst du nur indirekt mit Klassen benutzen, indem du eine normale Funktion übergibst, welche die Memberfunktion für eine als Argument übergebene Instanz aufruft.



  • Vielen vielen Dank für deine Antwort /rant/
    Welches Forum wenn nicht .Net in der MSDN stand .NET ? : )

    Vorerst ich habs gelöst mit diesem von mir alten geposteten Code schema

    #includes
    
    DEKLARATION THREAD
    
    int main()
    {
    
     _beginthread( thread_shutdown , 0 , NULL );
    }
    
    DEFINITION THREAD
    

    Meine Funktionen in den Threads ruf ich dann wie folgt auf

    test::methoden...
    

    Hab also meine Methoden static in der Klasse gemacht.

    Weiß jemand ein gutes Buch oder online Tutorial um mit threads und Events in C++ fit zu werden ?? Ja google gibt mir viel aber vielleicht kennt ja jemand einen supergoogle link : )

    Nun zu deiner Antwort.
    Memberfunktion = Methode
    Instanz = mit new erzeugtes Objekt

    Aber was meinst du mit,

    welche die Memberfunktion für eine als Argument übergebene Instanz aufruft.

    Könntest du ein Codebeispiel posten??
    Es reicht ein kurzes : )

    Vielen Dank



  • Es ist trotzdem kein .NET.
    _beginthread(ex) ist von der c-runtime.
    Simon



  • ok ok !! Ich glaubs schon !! : )



  • Hier ein kleines Bsp. wies angedacht wurde:

    #include <process.h>
    #include <windows.h>
    
    class Task
    {
    public:
        Task()
        {
            _thread = reinterpret_cast<HANDLE>(_beginthreadex(0, 0, &Task::threadProc, this, 0, 0));
        }
        ~Task()
        {
            WaitForSingleObject(_thread, INFINITE);
            CloseHandle(_thread);
        }
    
    private:
        static unsigned int __stdcall threadProc(void* arg)
        {
            Task* instance = reinterpret_cast<Task*>(arg);
            instance->threadProc();
            return 0;
        }
    
        void threadProc()
        {
            // ...
        }
    
    private:
        HANDLE _thread;
    };
    

Anmelden zum Antworten