/[cvs]/joko/Uni/BSArch/03/win32/utils_proc.c
ViewVC logotype

Diff of /joko/Uni/BSArch/03/win32/utils_proc.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by joko, Thu Jun 15 23:09:44 2006 UTC revision 1.4 by joko, Fri Jun 16 00:47:07 2006 UTC
# Line 2  Line 2 
2    
3  #include <windows.h>  #include <windows.h>
4    
5    // background process bookkeeping
6    HANDLE plist[MAXIMUM_WAIT_OBJECTS-1];
7    int plist_count = 0;
8    
9  BOOL os_start_process(char * filename, BOOL background) {  BOOL os_start_process(char * filename, BOOL background) {
10    
11    STARTUPINFO si;    STARTUPINFO si;
# Line 33  BOOL os_start_process(char * filename, B Line 37  BOOL os_start_process(char * filename, B
37    // 1. background mode    // 1. background mode
38    if (background) {    if (background) {
39      // TODO: background process bookkeeping      // TODO: background process bookkeeping
40        plist[plist_count] = pi.hProcess;
41        plist_count++;
42        
43    // 2. normal (blocking) mode    // 2. normal (blocking) mode
44    } else {    } else {
45      long status;      long status;
46      status = WaitForSingleObject(pi.hProcess, INFINITE);      status = WaitForSingleObject(pi.hProcess, INFINITE);
47            
48      // close process and thread handles.      // close process handle
49      CloseHandle(pi.hProcess);      CloseHandle(pi.hProcess);
     CloseHandle(pi.hThread);  
50            
51      // check for and handle errors      // check for and handle errors
52      if (status == WAIT_FAILED) {      if (status == WAIT_FAILED) {
# Line 53  BOOL os_start_process(char * filename, B Line 58  BOOL os_start_process(char * filename, B
58    return TRUE;    return TRUE;
59    
60  }  }
61    
62    BOOL os_wait_for_processes() {
63      
64      long status;
65      int i;
66      HANDLE hProcess;
67      
68      if (plist_count == 0)
69        return TRUE;
70      
71      status = WaitForMultipleObjects(plist_count, plist, TRUE, INFINITE);
72      
73      // close process handles
74      for (i = 0; i < plist_count; i++) {
75        //printf("close process handles\n");
76        hProcess = plist[i];
77        CloseHandle(hProcess);
78      }
79    
80      // reset process counter
81      plist_count = 0;
82      
83      // check for and handle errors
84      if (status == WAIT_FAILED) {
85        check_alert_error("WaitForMultipleObjects");
86        return FALSE;
87      }
88      
89      return TRUE;
90    }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.4

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed