هنگام استفاده از QProcess برنامه به حالت not responding میرود - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

هنگام استفاده از QProcess برنامه به حالت not responding میرود

0 امتیاز
با سلام

من یه برنامه ساده دارم که در اون با زدن یک دکمه، یک آبجکت از QProcess ایجاد میشود.
این QProcess چندین بار پشت سر هم دستور ping را اجرا میکند و من از نتایج آن استفاده میکنم

و اما مشکل:
زمانی که QProcess در حال اجرای ping هست، GUI برنامه به حالت Not Responding در میاید و بعد از اجرای ping دوباره به حالت عادی برمیگردد
من عملیات ایجاد QProcess و صدا زدن ping را به یک Thread هم انتقال دادم اما کماکان مشکل وجود داشت

آیا کسی برای رفع این مشکل نظری دارد؟
با تشکر
سوال شده بهمن 19, 1392 بوسیله ی Mehdi  
ویرایش شده بهمن 19, 1392 بوسیله ی مصطفی ساتکی
ُسلام کدی که نوشتید رو بزارید .
بردم تو thread درست شد
یادم نیست دفعه اول threadام چه مشکلی داشت ولی راه حلش همون thread بود

1 پاسخ

0 امتیاز
چند راه برای رفع مشکل رفتن رابط کاربری گرافیکی به حالت عدم پاسخگویی هنگام اجرای QProcess وجود دارد:
 
1-به محض اینکه QProcess اجرای دستور ping را به پایان رساند، از سیگنال ها و اسلات ها برای به روز رسانی رابط کاربری گرافیکی استفاده کنید. به این ترتیب، می توانید به محض اتمام QProcess، رابط کاربری گرافیکی را به روز کنید و از حالت Not Responding اجتناب کنید.
 
2-از QThread برای اجرای QProcess در پس زمینه استفاده کنید. به این ترتیب، رابط کاربری گرافیکی در زمانی که QProcess در حال اجرا است، پاسخگو باقی می ماند. هنگامی که QProcess به پایان رسید، می توانید از سیگنال ها و اسلات ها برای به روز رسانی رابط کاربری گرافیکی استفاده کنید.
 
3-از QEventLoop برای اجرای QProcess استفاده کنید. یک QEventLoop به شما اجازه می دهد تا همزمان با پردازش رویدادها در رشته اصلی، کد را در پس زمینه اجرا کنید. می توانید از QEventLoop برای اجرای QProcess استفاده کنید و به محض اتمام QProcess رابط کاربری گرافیکی را به روز کنید.
 
4- به جای QProcess از QTcpSocket برای پینگ استفاده کنید، که رابط کاربری گرافیکی را در طول اجرای دستور مسدود نمی کند.
 
5-از نوار پیشرفت یا یک انیمیشن بارگیری برای نشان دادن اینکه فرآیند در حال اجرا است استفاده کنید. این به کاربر اطلاع می دهد که برنامه ثابت نیست، بلکه فقط مشغول است.
 
توجه به این نکته مهم است که در هر صورت، استفاده از سیگنال ها و اسلات ها برای به روز رسانی رابط کاربری گرافیکی به روشی غیر مسدود کننده بسیار مهم است.
 
همچنین مهم است که توجه داشته باشید که راه حل بستگی به مورد استفاده خاص شما دارد و بهترین راه حل برای برنامه شما ممکن است با موارد ذکر شده در بالا متفاوت باشد.
پاسخ داده شده بهمن 7, 1401 بوسیله ی ali pourazar (امتیاز 85)   1 3 5
...