آموزش برنامه نویسی چند رشته ای در 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
#ifndef EXTHREADS_H
#define EXTHREADS_H
#include <QThread>
class ExThreads : public QThread
{
Q_OBJECT
public:
explicit ExThreads(QString threadName);
// Override run () method, which will be located
// executable code
void run();
private:
QString name; // thread name
};
#endif // EXTHREADS_H
exthreads.cpp
#include "exthreads.h"
#include <QDebug>
ExThreads::ExThreads(QString threadName)
{
name = threadName;
}
void ExThreads::run()
{
for (int i = 0; i <= 100; i++ ) {
qDebug() << name << " " << i;
}
}
main.cpp
#include <QCoreApplication>
#include "exthreads.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
ExThreads tA("thread A");
ExThreads tB("thread B");
ExThreads tC("thread C");
tA.start();
tB.start();
tC.start();
return a.exec();
}
نتیجه گیری :
همانطور که در تصویر بالا می بینید روند اجرای سه تابعی که قرار است یک تا صد را بشمارند بطور موازی و مجرا از هم بالا رفته این در حالی است که اگر ما این سه تابع را بدون مفهوم ترد اجرا میکردیم هر تابع منتظر به پایان رسیدن اجرای تابع قبلی می ماند و سپس اجرا میشد..
این مطلب ادامه خواهد داشت …
دیدگاهتان را بنویسید