简单多线程的使用方法

1.Qt中使用<thread.h>,不实际线程间数据通信

#include <QDebug>
#include <thread>
MainWindow::MainWindow()
{
    std::thread t(&MainWindow::OutPutLetter, this);
    t.detach();
    for (int i = 0 ; i < 26 ; ++i)
    {
        qDebug() << "MainThread Output: " << i;
    }
}
void MainWindow::OutPutLetter(void)
{
    int index = static_cast<int>('a');
    for(;index < 'z';++index)
    {
        qDebug() << "OtherThread Output: " << static_cast<char>(index);
    }
}

代码执行结果

MainThread Output:  0
OtherThread Output:  a
MainThread Output:  1
OtherThread Output:  b
MainThread Output:  2
...
MainThread Output:  23
OtherThread Output:  x
MainThread Output:  24
OtherThread Output:  y
MainThread Output:  25

2.MFC的多线程类

  <TestThread.h>

#define TEST_THREAD_START  (WM_USER + 320)
#define TEST_THREAD_PROGRESS  (WM_USER + 321)
#define TEST_THREAD_FAILED  (WM_USER + 322)

class EXT_CLASS CTestThread : public CWinThread
{
        DECLARE_DYNCREATE(CTestThread)

public:
        CTestThread(void);
        ~CTestThread(void);

public:
        /**
        * @brief 初始化多线程
        */
        BOOL InitInstance();

        /**
        * @brief 退出多线程
        */
        int ExitInstance();

        /**
        * @brief 设置监听类
        */
        void SetListenerWnd(CWnd* pWnd);

protected:
        /**
        * @brief 多线程调用函数
        */
        afx_msg void OnThreadUpgradeRun(WPARAM wParam, LPARAM lParam);
        DECLARE_MESSAGE_MAP()

private:
        CWnd* m_pListenerWnd;                   // 监听类
};

<TestThread.cpp>

#include "TestThread.h"

IMPLEMENT_DYNCREATE(CTestThread, CWinThread)

CTestThread::CTestThread(void){}

CTestThread::~CTestThread(void){}

BEGIN_MESSAGE_MAP(CTestThread, CWinThread)
        ON_THREAD_MESSAGE(TEST_THREAD_START, OnThreadUpgradeRun)
END_MESSAGE_MAP()

BOOL CTestThread::InitInstance()
{
        return TRUE;
}

int CTestThread::ExitInstance()
{
        return CWinThread::ExitInstance();
}

void CTestThread::SetListenerWnd(CWnd* pWnd)
{
        m_pListenerWnd = pWnd;
}

void CTestThread::OnThreadUpgradeRun(WPARAM wParam, LPARAM lParam)
{
        // 唤起进度条
        m_pListenerWnd->PostMessage(TEST_THREAD_PROGRESS, 参数1, 参数2);
}

在其他函数中启动多线程的方式

CTestThread* m_pTestThread;
m_pTestThread = (CTestThread*)AfxBeginThread(RUNTIME_CLASS(CTestThread));
m_pTestThread->SetListenerWnd(this);
m_pTestThread->PostThreadMessage(TEST_THREAD_START, 参数1, 参数2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值