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.