流程图:
#ifndef SENDTASK_H
#define SENDTASK_H
#include <QThread>
class SendTask : public QThread
{
Q_OBJECT
public:
SendTask(QObject *parent);
~SendTask();
int beginTask(const char *filename);
int getStatus();
int getProgress();
private:
void run();
char m_filename[128];
int m_filesize;
int m_bytesread;
int m_status;
};
#endif // SENDTASK_H
#include "SendTask.h"
#include <string.h>
#include <QDebug>
#include "Dialog_Error.h"
SendTask::SendTask(QObject *parent)
: QThread(parent)
{
}
SendTask::~SendTask()
{
}
int SendTask::beginTask(const char *filename)
{
strcpy(m_filename, filename);
m_bytesread = 0;
m_filesize = 0;
m_status = 0;
start();
return 0;
}
int SendTask::getStatus()
{
return m_status;
}
int SendTask::getProgress()
{
return m_bytesread * 100 / m_filesize;
}
void SendTask::run()
{
FILE *fp = fopen(m_filename, "rb");
if(!fp)
{
m_status = -1;
return ;
}
fseek(fp, 0, SEEK_END);
m_filesize = ftell(fp);
fseek(fp, 0, SEEK_SET);
char buf[1024];
while(1)
{
int n = fread(buf, 1, 1024, fp);
if(n <= 0)
{
break;
}
m_bytesread += n;
qDebug() << m_bytesread;
QThread::msleep(100);
}
m_status = 1;
fclose(fp);
}