Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Events in linux

Author: Robert Hyatt

Date: 19:24:29 04/24/01

Go up one level in this thread


On April 24, 2001 at 20:26:51, Eugene Nalimov wrote:

>On April 24, 2001 at 20:07:30, Robert Hyatt wrote:
>
>>On April 24, 2001 at 17:24:51, Hristo wrote:
>>
>>>On April 24, 2001 at 16:51:38, Vincent Diepeveen wrote:
>>>
>>>>On April 24, 2001 at 16:18:01, Hristo wrote:
>>>>
>>>>>On April 24, 2001 at 13:15:00, Vincent Diepeveen wrote:
>>>>>
>>>>>>Hello,
>>>>>>
>>>>>>I'm looking for code to make events in linux.
>>>>>>
>>>>>>In windows i use functions like
>>>>>>  WaitForMultipleObjects()
>>>>>
>>>>>There isn't one! If you depend on this functionality
>>>>>you migth have to redesign (rethink) something.
>>>>>Look for conditional variables ...
>>>>>In general you need the services of pthreads library ...
>>>>>look for ...
>>>>>pthread_cond_init
>>>>>pthread_cond_wait
>>>>>pthread_cond_*, etc  ...
>>>>>...
>>>>>pthread_mutex_init
>>>>>pthread_mutex_lock // no time out
>>>>>pthread_mutex_*, etc ...
>>>>
>>>>I see so i go write myself this function then :)
>>>
>>>duhhhh  ... yep. Well maybe someone wrote it already.
>>>If you would use it I will take a crack at it tonight
>>>and send it to you.
>>>If anyone knows about possible implementation of this
>>>function WaitForMultipleObjects ...
>>>... yell YELL now ... cause it is a hairy bastard!
>>>
>>>hristo
>>>
>>
>>
>>What exactly does it do?
>
>The WaitForMultipleObjects function returns when one of the following occurs:
>
>* Either any one or all of the specified objects are in the signaled state.
>* The time-out interval elapses.
>
>DWORD WaitForMultipleObjects(
>  DWORD nCount,             // number of handles in the handle array
>  CONST HANDLE *lpHandles,  // pointer to the object-handle array
>  BOOL fWaitAll,            // wait flag
>  DWORD dwMilliseconds      // time-out interval in milliseconds
>);
>



Could this be done via a group of descriptors in unix?  IE then he could
use select() which would block until something happened on any one of them.
And a timeout is included if needed so that it won't block forever...





>Parameters
>nCount -- Specifies the number of object handles in the array pointed to by
>lpHandles. The maximum number of object handles is MAXIMUM_WAIT_OBJECTS.
>
>lpHandles -- Pointer to an array of object handles. For a list of the object
>types whose handles can be specified, see the following Remarks section. The
>array can contain handles of objects of different types.
>
>Windows NT: The handles must have SYNCHRONIZE access. For more information, see
>Standard Access Rights.
>
>Windows 95: No handle may be a duplicate of another handle created using
>DuplicateHandle.
>
>fWaitAll -- Specifies the wait type. If TRUE, the function returns when the
>state all objects in the lpHandles array is signaled. If FALSE, the function
>returns when the state of any one of the objects set to is signaled. In the
>latter case, the return value indicates the object whose state caused the
>function to return.
>
>dwMilliseconds -- Specifies the time-out interval, in milliseconds. The function
>returns if the interval elapses, even if the conditions specified by the
>bWaitAll parameter are not met. If dwMilliseconds is zero, the function tests
>the states of the specified objects and returns immediately. If dwMilliseconds
>is INFINITE, the function's time-out interval never elapses.
>
>Return Values
>
>If the function succeeds, the return value indicates the event that caused the
>function to return. This value can be one of the following.
>
>Value Meaning
>
>WAIT_OBJECT_0 to (WAIT_OBJECT_0 + nCount - 1) If bWaitAll is TRUE, the return
>value indicates that the state of all specified objects is signaled.
>If bWaitAll is FALSE, the return value minus WAIT_OBJECT_0 indicates the
>lpHandles array index of the object that satisfied the wait. If more than one
>object became signalled during the call, this is the array index of the
>signalled object with the smallest index value of all the signalled objects.
>
>WAIT_ABANDONED_0 to (WAIT_ABANDONED_0 + nCount - 1) If bWaitAll is TRUE, the
>return value indicates that the state of all specified objects is signaled and
>at least one of the objects is an abandoned mutex object.
>If bWaitAll is FALSE, the return value minus WAIT_ABANDONED_0 indicates the
>lpHandles array index of an abandoned mutex object that satisfied the wait.
>
>WAIT_TIMEOUT The time-out interval elapsed and the conditions specified by the
>bWaitAll parameter are not satisfied.
>
>If the function fails, the return value is WAIT_FAILED. To get extended error
>information, call GetLastError.
>
>Remarks
>
>The WaitForMultipleObjects function determines whether the wait criteria have
>been met. If the criteria have not been met, the calling thread enters an
>efficient wait state, consuming very little processor time while waiting for the
>criteria to be met.
>
>When fWaitAll is TRUE, the function's wait operation is completed only when the
>states of all objects have been set to signaled. The function does not modify
>the states of the specified objects until the states of all objects have been
>set to signaled. For example, a mutex can be signaled, but the thread does not
>get ownership until the states of the other objects are also set to signaled. In
>the meantime, some other thread may get ownership of the mutex, thereby setting
>its state to nonsignaled.
>
>Before returning, a wait function modifies the state of some types of
>synchronization objects. Modification occurs only for the object or objects
>whose signaled state caused the function to return. For example, the count of a
>semaphore object is decreased by one. When fWaitAll is FALSE, and multiple
>objects are in the signaled state, the function chooses one of the objects to
>satisfy the wait; the states of the objects not selected are unaffected.
>
>The WaitForMultipleObjects function can specify handles of any of the following
>object types in the lpHandles array:
>
>* Change notification
>* Console input
>* Event
>* Job
>* Mutex
>* Process
>* Semaphore
>* Thread
>* Waitable timer
>
>For more information, see Synchronization Objects.
>
>Use caution when calling the wait functions and code that directly or indirectly
>creates windows. If a thread creates any windows, it must process messages.
>Message broadcasts are sent to all windows in the system. A thread that uses a
>wait function with no time-out interval may cause the system to become
>deadlocked. Two examples of code that indirectly creates windows are DDE and COM
>CoInitialize. Therefore, if you have a thread that creates windows, use
>MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx, rather than
>WaitForMultipleObjects.
>
>>
>>>>
>>>>>keep in mind that there is no function to wait on multiple
>>>>>conditional variables for you. Which makes it difficult when
>>>>>you need to wait on several things to happen before continue.
>>>>>
>>>>>Also semaphores do not have a time-out and neither do mutexes,
>>>>>so you have to couple a mutex+conditional_variable to be able to lock
>>>>>something with a time out. I've spend some time making things
>>>>>work so I have classes that encapsulate some of these and are
>>>>>prety simple. I can send them to you if you want ...
>>>>>my e-mail address is donquixote@pacbell.net
>>>>>(it changed but I'm not sure who can fix it for me on this message board)
>>>>>
>>>>>WaitForMultipleObjects is best implemented by the OS (kuddos to MS),
>>>>>however it is possible to write it using pthreads.
>>>>>
>>>>>
>>>>>best regards.
>>>>>hristo
>>>>>
>>>>>>
>>>>>>but i can't find the equivalent of this for linux!
>>>>>>
>>>>>>Best regards,
>>>>>>Vincent



This page took 0.01 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.