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 쓰레드 통신문제

qthread 쓰레드 통신문제

Scheduled Pinned Locked Moved Unsolved Korean
2 Posts 2 Posters 372 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