ورود

View Full Version : سوال: نحوه پیاده سازی Event Objects در دلفی ؟



مهران رسا
یک شنبه 13 تیر 1389, 12:39 عصر
با سلام ،

تعریف Event Objects


Notifies one or more waiting threads that an event has occurred

The event object is useful in sending a signal to a thread indicating that a particular event has occurred. For example, in overlapped input and output, the system sets a specified event object to the signaled state when the overlapped operation has been completed. A single thread can specify different event objects in several simultaneous overlapped operations, then use one of the multiple-object wait functions to wait for the state of any one of the event objects to be signaled.در همین Forum خیلی به Synchronization Objects اشاره شده اما نمونه ی کاربردی و کاملی وجود نداره .

مهران رسا
جمعه 18 تیر 1389, 11:16 صبح
کسی از دوستان هست که با Event Objects آشنا باشه ؟

vcldeveloper
جمعه 18 تیر 1389, 19:03 عصر
شما نحوه پیاده سازیش رو میخواید، یا نحوه استفاده اش رو؟ پیاده سازی اش مورد خاصی نداره، همون توابع کار با Event ویندوز رو (مثل CreateEvent, SetEvent, و غیره) در داخل یک کلاس Wrap کرده.

اگر منظور استفاده ازش هست، اگر با مفهوم Event در Synchronization آشنا باشید، استفاده ازش ساده هست:

Event هر زمان که Signaled باشه، یعنی Threadهایی که منتظر اون هستند، اجازه اجرا پیدا می کنند. هر زمان هم که non-signaled باشه، اجرای threadهایی که منتظر اون هستند، متوقف میشه.

توابع و متدهای مرتبط با اون هم وضعیت Signaled بودن یا نبودن event را مشخص می کنند؛ مثلا SetEvent مقدار اون رو Signaled میکنه؛ ResetEvent مقدار اون رو non-signaled میکنه، و PulseEvent، مقدار اون رو یک لحظه Signaled میکنه، و بعد از اجرای اولین Thread منتظر اون Event، مقدارش دوباره Non-signaled میشه.

دو نوع Event داریم؛ Manual reset events، و Auto reset events. فرق حالت Auto با Manual این هست که در حالت Auto، بعد از اینکه هر بار Event مربوطه Signaled میشه، به طور خودکار به حالت Non-signaled برمیگرده.

حالا اگر شما مفهومش را متوجه بشید، می بینید که کلاس TEvent همش یه متد Create داره که در زمان ساختش مقادیری مثل وضعیت اولیه Event، نوع Event، نام Event، و غیره رو میگیره، و چندتا متد که از اسمشان مشخص هست چه کاری با اون Event انجام میدند، مثل SetEvent، و ResetEvent.

حالا اینکه کجا میخواید ازش استفاده کنید، بستگی به خودتون و کاری که میخواید انجام بدید، داره.