MFC

  • פותח הנושא mich
  • פורסם בתאריך

mich

New member
MFC

שלום אני רוצה להריץ (בMFC) שני פרוססים אחד אחרי בשני אני משתמשת בקוד הבא פעמים, אבל הבעיה היא שהם רצים במקביל ולא אחד אחרי השני, אני מניחה שאני עושה משהו לא בסדר, השאלה היא מה?
STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if( !CreateProcess( NULL, // No module name (use command line). "Project1.exe", // Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent´s environment block. NULL, // Use parent´s starting directory. &si, // Pointer to STARTUPINFO structure. &pi ) // Pointer to PROCESS_INFORMATION structure. ) // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE );​
תודה מיכל
 

gilad_no

New member
תעלי את כל הקוד

נראה לי בסדר מה שכתבת. תעלי הכל ואז נראה גם בשאר הקוד.
 

voguemaster

New member
שאלה

בדקת את הערך המוחזר (אם יש כזה, לא זוכר..) של WaitForSingleObject ? יכול להיות שהתוכנית לא עוצרת ומחכה כמו שתכננת. אני אשמח לראות את שאר הקוד. עוד שאלה: למה חשוב לך להשתמש בפרוססים ? יש אפשרות שתוכלי להחליף אותם ב-THREADS ?? אלי
 

mich

New member
זה כל הקוד

חברים יקרים זה קטע הקוד היחיד שהוספתי (אני כותבת אוטו פעמיים) שהוא לא נכתב אוטומטית עם הסטנדרט של MFC. גם לי הוא נראה תקין אבל בפרוש הוא מריץ במקביל. תודה מיכל
 

albanetc

New member
תחפשי בקוד שלך את הסימן הבא:

! ותמחקי אותו יום נעים
 

gilad_no

New member
צודק בהחלט!!!

איך לא שמתי לב לזה
הוא מחכה שהפרוסס ייסתיים רק אם הוא לא הופעל. מה שאומר, שאם הצלחת להפעיל את הפרוסס, הוא ישר ימשיך הלאה, ואם לא הצלחת, את עלולה לתקוע את היישום. CreateProcess מחזירה אמת אם היא מצליחה.
 

albanetc

New member
לא להגזים...

לא תהיה פה תקיעה כי WaitForSingleObject יחזור מיד עם WAIT_FAILED, ואם אינני טועה ERROR_INVALID_HANDLE יוחזר ע"י GetLastError, אבל זה צריך לבדוק... ד"א CreateProcess מחזירה NONZERO כי היא מוגדרת BOOL ולא bool
 
למעלה