PDA

View Full Version : کار با ایونتها سی++



حامد فراست
جمعه 19 آبان 1385, 06:08 صبح
بابا تو این سایت به این بزرگی کسی نیست که بلد باشه چطوری یه event تعریف کنم و بعد توی کلاس دیگه فراخونی کنم بابا دمتون گرم:متفکر:

Arash_j13
شنبه 20 آبان 1385, 07:36 صبح
تو سی++ مثل وی بی یه چیزی به اسم ایونت نداریم برای کنترل ویندو ها از پیغام ها اصتفاده می شه ولی اگه منظورتون فراخوانی یه تابع هست می تونید از روشی که سی++ بیادر توی VCL استفاده می کنه استفاده کنید
توی کلاستون یه دیتا ممبر عمومی قرار بدید که یه اشاره گر به تابع باشه هر موقع لارم بود یه ایونت هندلر رو فراخوانی کنید این تابع رو فراخوانی کنید

ارام فارسی
یک شنبه 21 آبان 1385, 17:08 عصر
بابا event دیگه چه صیغه ایه؟ ما که تا حالا تو سی ++ نشنیدیم.

sh_roohani
دوشنبه 22 آبان 1385, 09:27 صبح
آقا حامد عزیز،

شما دو راه دارید:


1. استفاده از اشاره گر به تابع (همونطور که Arash_j13 هم گفت).
2. استفاده از توابع مجازی و الگوی Observer.

ارام فارسی
چهارشنبه 24 آبان 1385, 14:02 عصر
sh_roohani جان میشه برای من هم توضیح بدی که event در سی ++ چیه و چی کار میکنه؟
البته من هم توابع مجازی رو میشناسم و هم نحوه ی کار با اشاره گر تابع رو بلدم.
خیلی خیلی ممنونم.

sh_roohani
چهارشنبه 24 آبان 1385, 15:36 عصر
سلام،
ببین دوست عزیز، چیز جادویی به نام event واقعا وجود نداره. این فقط یه اصطلاحه. شما داری یه کاری می کنه. به یه جایی می رسی و می خوای دیگران رو هم مطلع کنی که می تونی به روشهای مختلف اینکار رو انجام بدی. مثلا ویندوز در صورتی که در محوطه یک پنجره خاص کلید ماوس کلیک بشه، یه عدد به Message Queue اون پنجره وارد می کنه که معرف کلیک شدن ماوسه و دفعه بعد که Message Loop اون پنجره به Message Queue سر می زنه تا عدد بعدی رو از داخل اون بخونه از روی مقدار اون عدد می فهمه که ماوس کلیک شده. حالا البته جزئیات یه کمی بیشتر از اینه. یعنی به جای یه عدد، یه struct هست با اطلاعاتی بیشتر از صرفا نوع اتفاقی که افتاده. حالا ما می خوایم یه شی دیگه رو از یه مسئله ای که مد نظرمونه آگاه کنیم. مثلا یه thread داریم که دائم به Serial Port یا یه سوکت گوش می ده و اگه data برسه می خواد اون data رو به شیء دیگه ای که مسئول پردازش اونه پاس کنه. اینکار رو هم می شه از طریق function pointer انجام داد، هم از طریق virtual function (در ++C البته) و هم می شه مثل ویندوز یه فریم ورک واسه اینکار ایجاد کرد.