فرض کنین پنجرهای در برناممون داریم که از نوع QWidget هستش و میخوایم مختصات لحظه به لحظه حرکت موس رو بگیریم. خب در این حالت قاعدتا باید تابع QWidget::mouseMoveEvent رو بازنویسی و مطابق با کاری که میخوایم انجام بدیم تعریف کنیم.
حالا اگر کاری که میخوایم در داخل تابع QWidget::mouseMoveEvent انجام بدیم زمانبر باشه برای جلوگیری از کند شدن برنامه و ایجاد تاخیر و از دست دادن جزئیات حرکت موس چه اقداماتی باید انجام بدیم؟
یکی راهی که به ذهن خودم رسید استفاده از یک نخ جدا برای انجام پردازش زمانبر هست ولی از اونجایی که لازمه قبل از اتمام تابع QWidget::mouseMoveEvent از join شدن نخ ایجاد شده اطمینان حاصل کنیم باز هم برنامه دچار تاخیر خواهد شد اگر هم بخوایم بلافاصله بعد از اجرای نخ اونو از نخ ایجاد کنندش جدا (detach) بکنیم بازم مشکل همچنان پا برجاست چون تابع QWidget::mouseMoveEvent پشت سر هم فراخوانی میشه و کلی نخ درست میشه که از نخ اصلی جدا شدن و نمیشه مدیریتشون کرد!
سلام خدمت دوستان و اساتید گرامی.
فرض کنین پنجرهای در برناممون داریم که از نوع
QWidget
هستش و میخوایم مختصات لحظه به لحظه حرکت موس رو بگیریم. خب در این حالت قاعدتا باید تابعQWidget::mouseMoveEvent
رو بازنویسی و مطابق با کاری که میخوایم انجام بدیم تعریف کنیم.حالا اگر کاری که میخوایم در داخل تابع
QWidget::mouseMoveEvent
انجام بدیم زمانبر باشه برای جلوگیری از کند شدن برنامه و ایجاد تاخیر و از دست دادن جزئیات حرکت موس چه اقداماتی باید انجام بدیم؟یکی راهی که به ذهن خودم رسید استفاده از یک نخ جدا برای انجام پردازش زمانبر هست ولی از اونجایی که لازمه قبل از اتمام تابع
QWidget::mouseMoveEvent
ازjoin
شدن نخ ایجاد شده اطمینان حاصل کنیم باز هم برنامه دچار تاخیر خواهد شد اگر هم بخوایم بلافاصله بعد از اجرای نخ اونو از نخ ایجاد کنندش جدا(detach)
بکنیم بازم مشکل همچنان پا برجاست چون تابعQWidget::mouseMoveEvent
پشت سر هم فراخوانی میشه و کلی نخ درست میشه که از نخ اصلی جدا شدن و نمیشه مدیریتشون کرد!در یک چنین وضعی چه کاری باید انجام بدیم؟
سپاس گزارم.
ویرایش شده در توسط نیما غراببه اشتراک گذاری این ارسال
لینک به ارسال
به اشتراک گذاری در سایت های دیگر