QtConcurrent:::run () 사용

10870 단어
QFuture run(const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
run () 함수의 원형은 위와 같습니다. 이 함수는 QtConcurrent 명칭 공간의 함수입니다.주요 기능은 함수를 실행하기 위해 하나의 라인을 시작하는 것이다.Concurrent의 영문 설명은 병렬이라는 뜻이다.
다음은 run () 함수의 사용 방법을 간단명료하게 소개합니다.
1. 먼저 다른 라인에서 실행해야 하는 함수가 있어야 한다.
void thread_add(QObject *receiver,int a,int b)
{
    QString message=QString("%1 + %2 = %3").arg(a).arg(b).arg(a+b);
 
  
    QApplication::postEvent(receiver,new ProgressEvent(true, message));
 
  
}

함수가 라인에서 실행된 후에receiver에 메시지를 보내서 결과를 되돌려줍니다.
 
2. 라인에서 실행할 함수가 생겼습니다. 라인을 어떻게 시작해서 이 함수를 실행하는지 다시 봅시다.
void MainWindow::on_pushButton_clicked()
{
 
  
 
    
  for 
  ( 
  int 
    
  i 
  = 
  0 
  ; 
  i 
  < 
  9 
  ; 
  i 
  ++) 
  
        for(int j=0;j<9;j++)
 
  
    QtConcurrent::run(thread_add,this,i,j);
 
  
}

단추를 누르면 이 코드를 실행하고 8*8=64개의 라인을 시작합니다. 라인이 실행할 함수는thread 입니다add (이전에 정의된) 메시지 수신 대상은MainWindow와 같은 종류의 실례입니다
 
3. 스레드가 실행되면 Main Window에 메시지를 보냅니다. Main Window는 bool Main Window를 다시 실현합니다.: 이벤트(QEvent * 이벤트)가 받은 메시지를 처리하고 표시합니다
bool MainWindow::event ( QEvent * event )
{
    if (event->type() ==
            static_cast<QEvent::Type>(ProgressEvent::EventId)) {
        ProgressEvent *progressEvent =
                static_cast<ProgressEvent*>(event);
        Q_ASSERT(progressEvent);
        ui->teLog->append(progressEvent->message);
        return true;
    }
    return QMainWindow::event(event);
 
  
}

 
사용자 정의 메시지 구조를 제시합니다
struct ProgressEvent : public QEvent
{
    enum {EventId = QEvent::User};
 
  
    explicit ProgressEvent(bool saved_, const QString &message_)
        : QEvent(static_cast<Type>(EventId)),
          saved(saved_), message(message_) {}
 
  
    const bool saved;
    const QString message;
};

좋은 웹페이지 즐겨찾기