Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Korean
  4. qthread 쓰레드 통신문제
Qt 6.11 is out! See what's new in the release blog

qthread 쓰레드 통신문제

Scheduled Pinned Locked Moved Unsolved Korean
2 Posts 2 Posters 1.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    maerad7
    wrote on last edited by
    #1

    qthread끼리 통신을 slot과 signal로 할때 qvector로 하는 방법이 있을까요?

    1 Reply Last reply
    0
    • j2dollJ Offline
      j2dollJ Offline
      j2doll
      wrote on last edited by
      #2
      • QVector를 QThread 간 통신에서 signal과 slot을 통해 전달할 수 있습니다. QVector<int> 같은 기본적인 타입의 QVector는 Qt의 QueuedConnection에서 자동으로 복사되어 전달됩니다.
      1. QVector를 signal과 slot을 통해 전달하는 예제
      • 아래 예제에서는 두 개의 QThread가 있고, 하나의 스레드에서 QVector<int> 데이터를 생성하여 다른 스레드로 전달하는 방식입니다.
      // 데이터를 생성하는 스레드
      class Producer : public QThread {
          Q_OBJECT
      signals:
          void dataProduced(QVector<int> data);
      
      protected:
          void run() override {
              QVector<int> data = {1, 2, 3, 4, 5};
              emit dataProduced(data); // QVector 전달
              msleep(1000);
          }
      };
      
      // 데이터를 처리하는 스레드
      class Consumer : public QThread {
          Q_OBJECT
      public slots:
          void processData(QVector<int> data) {
              qDebug() << "Received QVector<int>:" << data;
          }
      };
      
      int main(int argc, char *argv[]) {
          QCoreApplication a(argc, argv);
      
          Producer producer;
          Consumer consumer;
      
          QObject::connect(&producer, &Producer::dataProduced, &consumer, &Consumer::processData, Qt::QueuedConnection);
      
          consumer.start();
          producer.start();
      
          producer.wait();
          consumer.quit();
          consumer.wait();
      
          return a.exec();
      }
      
      2. 요약
      • QVector<int> 같은 기본 타입을 담은 QVector는 Qt의 QueuedConnection에서 자동으로 복사 전달됩니다.
      • 만약 QVector<MyClass>처럼 사용자 정의 클래스가 포함된 경우, Q_DECLARE_METATYPE(MyClass) 및 qRegisterMetaType<QVector<MyClass>>()을 호출해야 합니다.
      • 대량의 데이터를 처리할 경우, 복사 비용을 줄이기 위해 const QVector<int>& 같은 참조를 사용하면 좋습니다.

      이렇게 하면 QVector를 QThread 간 안전하게 전달할 수 있습니다.

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved