آموزش برنامه نویسی چند رشته ای در Qt- قسمت اول - وب سایت رضا احمدی

qt-multithreading-c-plus-plus-

آموزش برنامه نویسی چند رشته ای در Qt- قسمت اول

در این مقاله مطالبی راجع به نوشتن برنامه های چند رشته ای و مبحث همزمانی در فریم ورک Qt  گرد آوری شده است.امیدوارم این مطالب مفید واقع شود.

Multithreading  چیست؟

thread  در لغت به مغنای نخ یا رشته است. و وقتی حرف از مالتی تردینگ ب میان می آید منظور چیزهایی است که به صورت همزمان (موازی) بتوانیم انجام دهیم.

هر نرم افزاری را که ما اجرا می کنیم یک رشته اصلی (main) دارد و می توان تعدادی رشته دیگر در این برنامه باشد که همگی آن ها همزمان با این رشته و در یک پردازش اجرا شوند . اینجاست که مفهموم multithreading programming (برنامه نویسی چند رشته ای) پیش می آید.

چند رشته ای در کیوتی :

برای این منظور در کیوتی کلاسها و راهای مختلفی وجود دارد که یکی از پر کاربردترین آن ها کلاس QThread می باشد.بدین صورت که این کلاس را به عنوان بیس کلاس مورد نظز خودمان در نظر می گیریم و تابع run() آن را دوباره پیاده سازی میکنیم یا اصطلاحا override میکنیم .

به مثال زیر دقت کنید:

یک پروژه از نوع Qt Console application   بسازید …

در این مثال سه رشته مجزا قرار است مقدار یک تا صد را بشمارند و در خروجی نمایش دهند. یک کلاس به نام ExThreads به پروژه اضافه کنید و آن گاه:

.pro

QT -= gui
QT +=core  
CONFIG += c++11 console
CONFIG -= app_bundle

exthreads.h

  1. #ifndef EXTHREADS_H
  2. #define EXTHREADS_H
  3.  
  4. #include <QThread>
  5.  
  6. class ExThreads : public QThread
  7. {
  8.     Q_OBJECT
  9. public:    
  10.     explicit ExThreads(QString threadName);
  11.  
  12.     // Override run () method, which will be located
  13.     // executable code
  14.     void run();
  15. private:
  16.     QString name;   // thread name
  17. };
  18.  
  19. #endif // EXTHREADS_H

exthreads.cpp

  1. #include "exthreads.h"
  2. #include <QDebug>
  3.  
  4. ExThreads::ExThreads(QString threadName)
  5. {
  6. name = threadName;
  7.  
  8. }
  9.  
  10. void ExThreads::run()
  11. {
  12.     for (int i = 0; i <= 100; i++ ) {
  13.             qDebug() << name << " " << i;
  14.         }
  15. }

main.cpp

  1. #include <QCoreApplication>
  2. #include "exthreads.h"
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.     QCoreApplication a(argc, argv);
  7.     ExThreads tA("thread A");
  8.     ExThreads tB("thread B");
  9.     ExThreads tC("thread C");
  10.  
  11.     tA.start();
  12.     tB.start();
  13.     tC.start();
  14.     return a.exec();
  15. }
برنامه نویسی چند رشته ای درکیوتی
QThread console output

نتیجه گیری :

همانطور که در تصویر بالا می بینید روند اجرای سه تابعی که قرار است یک تا صد را بشمارند بطور موازی و مجرا از هم بالا رفته این در حالی است که اگر ما این سه تابع را بدون مفهوم ترد اجرا میکردیم هر تابع منتظر به پایان رسیدن اجرای تابع قبلی می ماند و سپس اجرا میشد..

این مطلب ادامه خواهد داشت …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دیدگاه های ثبت شده

تا کنون دیدگاهی ثبت نشده است.