开发者

Thread Proc for an instancable class?

开发者 https://www.devze.com 2023-01-02 03:04 出处:网络
Basically I have a class and it is instincable (not static). Basically I want the class to be able to generate its own threads and manage its own stuff. I don\'t want to make a global cal开发者_运维知

Basically I have a class and it is instincable (not static). Basically I want the class to be able to generate its own threads and manage its own stuff. I don't want to make a global cal开发者_运维知识库lback for each instance I make, this doesnt seem clean and proper to me. What is the proper way of doing what I want. If I try to pass the threadproc to CreateThread and it is the proc from a class instance the compiler says I cannot do this. What is the best way of achieving what I want? Thanks


class Obj
{
    static ULONG WINAPI ThreadProc(void* p)
    {
       Obj* pThis = (Obj*)p;
       ... do stuff ...
       return 0;
    }

    void StartMemberThread()
    {
         CreateThread(... ThreadProc, this, ... ); 
    }
};

Trickiest part is making sure the thread doesn't use pThis after the object goes away.


What you want to do is create a static member method that in turn calls the threadproc member. It will need a pointer to the class instance to make that call so you will need to pass 'this' as the (void *) parameter to CreateThread.


Why use WIN32 threads when you can use a simple and cross-platform solution such as the boost::thread library? That eliminates your problem altogether. If you are using WIN32 (or pthreads), though, you can specify a void* argument that should be passed to your thread routine. So, that void* object can be a pointer to a class; simply cast it back to its correct type in the thread routine. Once you have casted the void* back to a typed pointer, you can invoke the member functions of that object.

P.S. The word is "instantiable".

0

精彩评论

暂无评论...
验证码 换一张
取 消