QtConcurrent:::run () 사용
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;
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.