文章收藏-FAQ 位置:电脑学习网

一段 C++ 代码(成员函数做线程函数)

#include 〈windows.h〉
#include 〈conio.h〉
#include 〈stdio.h〉

class CThreadClass
{
public:

typedef DWORD (WINAPI CThreadClass::* pMemberThreadFunc)();
typedef DWORD (WINAPI * PTHREADFUNC)(LPVOID);

    CThreadClass();
    void SetDescrip(char* str) { lstrcpy(m_str,str); }
    void PrintfDescrip() { printf(“m_str = %s\n“,m_str); }
    void RunThread();
    bool FinishThread();

protected:
    char m_str[1024];
    DWORD WINAPI ThreadFunc();
    HANDLE m_ThreadHandle;
    DWORD  m_ThreadID;
    pMemberThreadFunc m_pMemberFun;
};

CThreadClass::CThreadClass()
{
    memset(m_str,0,1024);
    m_ThreadID = 0;
    m_ThreadHandle = 0;
    m_pMemberFun = ThreadFunc;
}

void CThreadClass::RunThread()
{
    PTHREADFUNC pFun;
    DWORD dwAddress;
    memcpy(&dwAddress,&m_pMemberFun,sizeof(m_pMemberFun));
    memcpy(&pFun, &dwAddress, sizeof(pFun));
    m_ThreadHandle = CreateThread(NULL, 0, pFun, this, 0, &m_ThreadID);
}

bool CThreadClass::FinishThread()
{
    bool bRet = true;
    if (m_ThreadID == NULL)
        return bRet;
    ::PostThreadMessage(m_ThreadID, WM_QUIT, 0, 0);
    DWORD rc = ::WaitForSingleObject(m_ThreadHandle, 5000);
    if(rc == WAIT_TIMEOUT)
    {
        TerminateThread(m_ThreadHandle,0);
        bRet = false;
    }
    if (m_ThreadHandle)
        CloseHandle(m_ThreadHandle);
    m_ThreadHandle = NULL;
    m_ThreadID = 0;
    return bRet;
}

DWORD WINAPI CThreadClass::ThreadFunc()
{
    for(;;)
    {
        PrintfDescrip();
        Sleep(3000);
    }
    return 0;
}

void main()
{
    CThreadClass t1, t2;

    t1.SetDescrip(“the t1 Member Function Thread run!“);
    t1.RunThread();

    t2.SetDescrip(“the t2 Member Function Thread run!“);
    t2.RunThread();

    getch();
    printf(“wait for TerminateThread...\n“);

    t1.FinishThread();
    t2.FinishThread();
    printf(“exit!\n“);

    getch();
}

     [文章来源:“十万个为什么”电脑学习网]
     [网络地址:http://why100000.com]
     [版权声明:除本站部分特别声明禁止转载的专稿外,其他的文章可以自由转载,但请务必注明出处和原始作者。本站文章版权归文章原作者所有。如果本站转载的文章有版权问题请联系本站,我们会尽快予以更正。]
 

【字体:[大] [中] [小] 【加入收藏】 【发表评论】 【关闭本窗口】

Copyright © “十万个为什么”电脑学习网 2000-2007 陕ICP备06007929号
站务联系:MSN & Email:zhangking2008@gmail.com  QQ:9365822