Jump to content
DavidJr.

TSimpleEvent how to

Recommended Posts

Hi,

 

I am trying to understand TSimpleEvent (or TEvent) and complete documentation with examples doesn't seem to be so easy to find.  I suspect that it can be used as a trigger more effectively than a boolean, but I am not so sure without a better understanding.   I would like to create a one time trigger that is set as an event so a procedure can execute.  The procedure unset it and set another Event to allow for a waitfor() like procedure to wait for the procedure to finish work.  IS my understanding of a TSImpleEvent in that it can serve as a trigger correct?  Also how is it turned on and off?  I got the idea from Bechhoff's TwinCAT3 environment where there is a Trigger object that once its read its automatically turned off so to NOT allow a method called by the trigger to be called more than once.

 

 

Thanks.

Edited by DavidJr.

Share this post


Link to post
1 hour ago, DavidJr. said:

I am trying to understand TSimpleEvent (or TEvent) and complete documentation with examples doesn't seem to be so easy to find.

Really?

https://docwiki.embarcadero.com/Libraries/en/System.SyncObjs.TSimpleEvent

https://docwiki.embarcadero.com/Libraries/en/System.SyncObjs.TEvent

https://docwiki.embarcadero.com/RADStudio/en/Waiting_for_a_Task_to_Be_Completed

Share this post


Link to post

Yes.  I saw those.  But I do not know from those pages the proper way to use SetEvent or ResetEvent  or any properites or other methods.  No example code like you would expect from TTask and the like.

 

 

More specifically What is SetEvent doing vs ResetEvent?  Which thread has rights to these methods? 

Edited by DavidJr.
clarify

Share this post


Link to post
1 hour ago, DavidJr. said:

Yes.  I saw those.  But I do not know from those pages the proper way to use SetEvent or ResetEvent  or any properites or other methods.

What exactly are you so confused about?  A T(Simple)Event has a state - signaled or unsignaled.  You set the initial state when you create the event.  You update the state with SetEvent() (signaled) and ResetEvent() (unsignaled), and use WaitFor() to test whether the event is signaled or not, optionally waiting for a period of time to see if an unsignaled event becomes signaled.  Period.  It is really not more complicated than that.

1 hour ago, DavidJr. said:

More specifically What is SetEvent doing vs ResetEvent?

What more do you want to know that the documentation is not already telling you?

 

https://docwiki.embarcadero.com/Libraries/en/System.SyncObjs.TEvent.SetEvent

Quote

Turns on the signal of the event object.

 

https://docwiki.embarcadero.com/Libraries/en/System.SyncObjs.TEvent.ResetEvent

Quote

Turns off the signal of the event object.

 

https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.SyncObjs.THandleObject.WaitFor

Quote

Waits until this THandleObject object enters into the signaled state.

1 hour ago, DavidJr. said:

Which thread has rights to these methods? 

All threads in your process that can access the T(Simple)Event object itself will have rights to call the event's methods.

 

Also, if you assign a name to the event, any thread in another process can open the event by that name.  Such a thread will have access to update the event's state if it requests the EVENT_MODIFY_STATE right when opening the event, and access to wait on the event's signaled state if it requests the SYNCHRONIZE right.

Share this post


Link to post
7 minutes ago, Remy Lebeau said:

What exactly are you so confused about?  A T(Simple)Event has a state - signaled or unsignaled.  You set the initial state when you create the event.  You update the state with SetEvent() (signaled) and ResetEvent() (unsignaled), and use WaitFor() to test whether the event is signaled or not, optionally waiting for a period of time to see if an unsignaled event becomes signaled.  Period.  It is really not more complicated than that.

What more do you want to know that the documentation is not already telling you?

 

https://docwiki.embarcadero.com/Libraries/en/System.SyncObjs.TEvent.SetEvent

 

https://docwiki.embarcadero.com/Libraries/en/System.SyncObjs.TEvent.ResetEvent

 

https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.SyncObjs.THandleObject.WaitFor

All threads in your process that can access the T(Simple)Event object itself will have rights to call the event's methods.

 

Also, if you assign a name to the event, any thread in another process can open the event by that name.  Such a thread will have access to update the event's state if it requests the EVENT_MODIFY_STATE right when opening the event, and access to wait on the event's signaled state if it requests the SYNCHRONIZE right.

This is helpful.   

 

Other than this page: https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.SyncObjs.THandleObject.WaitFor , I did not see these pages until you provided links:

 

https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.SyncObjs.TEvent.SetEvent

https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.SyncObjs.TEvent.ResetEvent

 

Thank you for the info.

 

Edited by DavidJr.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×