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

本文介绍了一个使用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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值