线程类模型

    技术2022-05-20  40

    class ThreadIf

    {

       protected:

          HANDLE mThread;

          Id mId; 

       public:   

          ThreadIf();

          virtual ~ThreadIf();

       public:

          virtual void run();

          virtual void thread() = 0;

    }

     

    extern "C"  //定义C函数

    {

         threadIfThreadWrapper( void* threadParm )

         {

            assert( threadParm );

            ThreadIf* t = static_cast < ThreadIf* > ( threadParm );

     

            assert( t );

            t->thread();

            return 0;

         }

    }

     

    ThreadIf::run()

    {

       mThread =(HANDLE)_beginthreadex (

             NULL, 

             0,

             RESIP_THREAD_START_ROUTINE

             (threadIfThreadWrapper),

             this,

             0,

             (unsigned*)&mId

     

       );

    }

     

     

    ThreadIf::join()

    {

       if (mId == 0)

       {

          return;

       }

       DWORD exitCode;

       while (true)

       {

          if (GetExitCodeThread(mThread,&exitCode) != 0)

          {

             if (exitCode != STILL_ACTIVE)

             {

                break;

             }

             else

             {

                WaitForSingleObject(mThread,INFINITE);

             }

          }

          else

          {

             break;

          }

       }

       //  !kh!

       CloseHandle(mThread);

       mThread=0;

       mId = 0;

    }

     

    在其派生类中实现thread();


    最新回复(0)