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);