|
|
1.1 ! root 1: Sample: Porting a DosStartSession Termination Queue ! 2: ! 3: Summary: ! 4: ! 5: This sample code demonstrates how to start multiple ! 6: processes and wait on them to terminate. It also ! 7: demonstrates how to convert the OS/2 method of reading from ! 8: a "termination queue" to the equivalent Win32 API function ! 9: calls. ! 10: ! 11: In the sample, a number of child processes are started. The ! 12: program then waits for any of them to end via the Win32 ! 13: WaitForMultipleObjects function call. As soon as a process ! 14: terminates, the return code for the terminated process is ! 15: retrieved and reported to the console. ! 16: ! 17: More Information: ! 18: ! 19: After starting child sessions with DosStartSession in OS/2, ! 20: if you want to be notified when the child sessions ! 21: terminate, you must create a queue and pass the handle to ! 22: that queue into the DosStartSession call. When a child ! 23: session ends, you receive a queue packet containing ! 24: information about which session (by session ID) ended and ! 25: what the termination code of that session is. ! 26: ! 27: A major limitation of this method is that you are allowed ! 28: only one termination queue per parent; this imposes some ! 29: complications with multiple-threaded applications starting ! 30: multiple sessions in different threads; you cannot have ! 31: multiple threads reading from the same termination queue at ! 32: the same time. The common solution is to have one central ! 33: termination queue thread that reads from the termination ! 34: queue (all of the child sessions's termination packets ! 35: arrive in this one Queue), and process all of the ! 36: termination queue packets for all of the other threads. ! 37: ! 38: Under Win32, this complication is not there. Each thread ! 39: that starts a new session simply waits for the new process ! 40: handle to be signaled. ! 41: ! 42: This demonstration does not involve multiple threads, nor ! 43: does it demonstrate the complexity of the OS/2 version of ! 44: multiple threads waiting for multiple sessions to terminate. ! 45: It demonstrates the more simple case of starting a few ! 46: sessions and waiting for all of them to end; the Win32 ! 47: technique used is still fully demonstrated without including ! 48: a great deal of OS/2 code. ! 49: ! 50: The following is a list of the Win32 API functions used in ! 51: this sample: ! 52: ! 53: CloseHandle CreateProces GetLastErro WaitForMultipleOb ! 54: s r jects ! 55: ! 56:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.