في لغة C++، يمكنك وضع تعريف لمتغير std::thread
في نطاق أكبر ليصبح متاحًا في جميع أنحاء الكود. يمكنك استخدام متغير من هذا النوع لإنشاء وإدارة الخيوط بطريقة تلبي احتياجاتك. النطاق الذي تم إنشاء فيه المتغير يحدد متى يمكنك الوصول إليه ومتى يتم تدميره.
للقيام بذلك في الشيفرة الخاصة بك، يمكنك تعريف المتغير خارج الحلقة while لجعله متاحًا في كل تكرار. وبمجرد أن تقرر إنشاء الخيط، يمكنك التحقق من حالة التشغيل باستخدام الشرط وتنفيذ الخطوات المناسبة.
-
فحص تداخل أوقات الورديات في Java: دليل شامل22/02/2024
-
تشغيل تطبيق Angular كتطبيق ثابت في المتصفح07/04/2024
-
فهم كيفية استيراد واستخدام الوحدات في جوليا25/02/2024
-
استكشاف أدوات مكتبة stdlib في لغة C19/01/2024
فيما يلي تعديل على الشيفرة الخاصة بك:
cpp#include
void someFunction() {/*someTask*/}
int main() {
bool isFirstRun = true;
std::thread t1; // تعريف المتغير الخاص بالخيط خارج الحلقة
while (true) {
if (!isFirstRun) {
t1 = std::thread(someFunction); // إنشاء الخيط عندما isFirstRun يكون false
}
//some long task
if (!isFirstRun) {
t1.join(); // الانضمام إلى الخيط إذا كان قد تم إنشاؤه
}
if (isFirstRun) {
isFirstRun = false;
}
}
return 0;
}
هذا التعديل يضمن أن المتغير t1
قابل للوصول في جميع أنحاء الكود ويمكن إعادة استخدامه لإنشاء وإدارة الخيوط داخل الحلقة.
المزيد من المعلومات
بالطبع، دعونا نوسع على موضوع الخيوط في C++ ونقدم مزيدًا من المعلومات حول كيفية التعامل معها وكيفية تحقيق التحكم في تنفيذ الخيوط.
في C++، تعد الخيوط (Threads) واحدة من الأدوات الرئيسية لتحقيق التنفيذ المتعدد الخيوط (Multithreading). يسمح Multithreading بتنفيذ عمليات متعددة في وقت واحد، مما يعزز كفاءة البرامج ويزيد من استفادة الأنظمة من موارد الجهاز.
لتحقيق التحكم في تنفيذ الخيوط في C++، يمكنك استخدام متغيرات الحالة والتزامن (Synchronization) بين الخيوط. على سبيل المثال، يمكنك استخدام std::mutex
لتأمين مناطق الكود التي يتعين فيها تفاعل عدة خيوط.
إليك مثال على كيفية استخدام std::mutex
لتحقيق تزامن بين الخيوط:
cpp#include
#include
#include
std::mutex threadMutex; // تعريف متغير mutex
void someFunction() {
//some task
std::lock_guard lock(threadMutex) ; // قفل المتغير mutex
std::cout << "Thread ID: " << std::this_thread::get_id() << " is executing someFunction()\n";
//some other task
} // تلقائياً، سيتم إلغاء قفل المتغير mutex عند انتهاء نطاق lock_guard
int main() {
bool isFirstRun = true;
std::thread t1;
while (true) {
if (!isFirstRun) {
t1 = std::thread(someFunction);
}
//some long task
if (!isFirstRun) {
t1.join();
}
if (isFirstRun) {
isFirstRun = false;
}
}
return 0;
}
هذا المثال يستخدم std::mutex
لتأمين إخراج الدالة someFunction()
بحيث يتم تنفيذها بشكل متزامن بين الخيوط. يتم استخدام std::lock_guard
لضمان فتح وإغلاق المتغير threadMutex
بشكل تلقائي وآمن.