1,649
社区成员
发帖
与我相关
我的任务
分享
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <windows.h>
#include <QDebug>
#include "myobject.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
static int threadFunc(void* _data);
signals:
void start();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void Run();
void Run(int pos);
void on_pushButton_3_clicked();
private:
MyObject obj;
Ui::MainWindow *ui;
HANDLE thread;
bool bExit;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
bExit = false;
connect(this,SIGNAL(start()),this,SLOT(Run()));
connect(&obj,SIGNAL(start(int)),this,SLOT(Run(int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::Run(int pos){
ui->progressBar->setValue(pos);
qDebug()<<GetCurrentThreadId()<<endl;
}
void MainWindow::Run(){
while(!bExit)
{
for(int i=0;i<100;i++){
ui->progressBar->setValue(i);
Sleep(1000);
}
}
qDebug()<<GetCurrentThreadId()<<endl;
}
int MainWindow::threadFunc(void* _data){
MainWindow* m = (MainWindow*)_data;
m->Run();
return 0;
}
void MainWindow::on_pushButton_clicked()
{
thread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)threadFunc,this,0,0);
qDebug()<<GetCurrentThreadId();
}
void MainWindow::on_pushButton_2_clicked()
{
bExit= true;
}
void MainWindow::on_pushButton_3_clicked()
{
obj.Start();
}
#ifndef MYOBJECT_H
#define MYOBJECT_H
#include <QObject>
#include <Windows.h>
class MyObject : public QObject
{
Q_OBJECT
public:
explicit MyObject(QObject *parent = 0);
signals:
void start(int pos);
public:
void Start();
HANDLE thread;
static int mythread(void* data);
public slots:
};
#endif // MYOBJECT_H
#include "myobject.h"
MyObject::MyObject(QObject *parent) :
QObject(parent)
{
}
int MyObject::mythread(void* data)
{
MyObject* obj = (MyObject*)data;
for(int i=0;i<1000;i++){
emit obj->start(i);
}
return 0;
}
void MyObject::Start(){
thread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)mythread,this,0,0);
}
void CthreadtestDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
thread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)threadfunc,this,0,0);
TRACE("主线程%d\n",GetCurrentThreadId());
}
int CthreadtestDlg::threadfunc(void* data){
TRACE("副线程%d\n",GetCurrentThreadId());
CthreadtestDlg* dlg = (CthreadtestDlg*)data;
dlg->Run();
return 0;
}
void CthreadtestDlg::Run(){
for(int i=0;i<100;i++)
m_progress.SetPos(i);
}