C++ طريقة تمرير قيم للدالة التي ينفذها الثريد

في المثال التالي قمنا بتعريف دالة إسمها func() عند استدعائها نمرر لها نص فتقوم بطباعته 5 مرات مع التوقف لثانية واحدة في كل مرة.
في الدالة main() قمنا بإنشاء كائنين من الكلاس thread, الأول ينفذ الدالة func() و يمرر لها النص "Thread-1 is executed.." و الثاني ينفذ الدالة func() و يمرر لها النص "Thread-2 is executed..".

ملاحظة: لتمرير قيمة لباراميتر الدالة التي ينفذها الثريد قم بوضع فاصلة بعد إسم الدالة و من ثم القيمة, و في حال أردت تمرير أكثر من قيمة يجب أن تضع فاصلة بين كل قيمتين.

مثال

main.cpp
#include <iostream>
#include <thread>
#include <chrono>

using namespace std;

void func(string txt)
{
    for(int i=0; i<5; i++)
    {
        cout << txt << "\n";
        this_thread::sleep_for(chrono::seconds(1));
    }
}

int main()
{
	// txt و كل واحد منهما يمرر لها نص مختلف مكان الباراميتر func() ينفذان الدالة thread هنا قمنا بإنشاء كائنين من الكلاس 
	thread t1(func, "t1 is executed..");
	thread t2(func, "t2 is executed..");

	// المترجم ينتظر t2 و t1 من الكائنين join() هنا وضعنا قمنا باستدعاء الدالة
	// قبل أن يتابع تنفيذ باقي الأوامر الموجودة في الملف t1 و t1 أن يتوقف الكائنين 
	t1.join();
	t2.join();
	
	cout << "All threads are stopped!";
	
	return 0;
}
		

سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل.

t1 is executed..
t2 is executed..
t2 is executed..
t1 is executed..
t2 is executed..
t1 is executed..
t2 is executed..
t1 is executed..
t2 is executed..
t1 is executed..
All threads are stopped!
		

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة