| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > WaitForMultipleObjects из консольного приложения |
| Автор: youngprankster 19.3.2010, 16:02 | ||
| Не понимаю особенностей работы. Пытаюсь запустить консольное приложение несколько раз с некоторыми параметрами. CreateProcess отрабатывает нормально, но WaitForMultipleObjects выдает WAIT_FAILED - код ошибки 6 (Invalide handle). Интересность в том, что если вышеозначенные действия я делаю для приложения с формами (VCL Forms Application) - все работает "на ура". Когда же я абсолютно тот же код запускаю из консоли (Console Application) - собственно, и происходит описанный ошибочный эффект. Созданные консольные приложения на момент вызова WaitForMultipleObjects работают. Буду признателен за помощь!
|
| Автор: world 19.3.2010, 23:20 | ||||||
| 1.Единственная мысль, что программа не может получить дескриптор одного или нескольких потоков. В связи с этим предлагаю модифицировать программу в районе 26 строчки. Добавив проверку на создание не инвалидного дескриптора.
2.Когда я учил эту часть языка. Преподаватель советовал вместо
использовать
Мотивировав это, тем, что на некоторых версиях ОС будет возникать ошибка, связанная с тем, что функция CreateProcess, хотя и не изменяет командую строку, но в свою очередь требует не константной строки, правда, признаюсь честно, это точно не решит Вашей проблемы |
| Автор: youngprankster 20.3.2010, 00:20 | ||||||||
На валидность дескрипторов проверял. При преобразовании к числу выходит вполне правдоподобный идентификатор, который, правда, не совпадает ни с одним из тех, что можно видеть в диспетчере задач. Если же брать pInfo.dwProcessId, то он в точности совпадает с тем процессом, который порожден программой и крутится в списке задач. Попытка заменить
Хм, интересно Мне кажется, что копать надо именно в сторону того, что ожидание происходит консольного приложения из консоли - ибо из "форменного" все работает. Вот только куда копать... мозг уже плавится |
| Автор: world 20.3.2010, 19:14 | ||||
| Пытался промоделировать возникновение ошибки, не разу не удалось получить необходимый результат (в смысле ошибку) Уже пробовал запускать и консольные и оконные приложения, и менял параметры функций, ошибка не возникает Разве, что возникла идея, как можно проверить, это проблема с дескрипторами или функцией. Попробуй задать все значения в CreateProcess по умолчанию
если ошибка, будет возникать, надо проверять правильность дескрипторов, нет - где-то в сторону параметров функции рыть надо.
Дк, дескриптор вроде и не должен может и не совпадать с идентификатором. Вобщемто поэтому попытка приведения идентификатора к дескриптору и не увенчалась успехом. ЗЫ. А как срочно проблема должна быть решена. Могу в понедельник подойти к преподу, который на этом специализируется проконсультироваться. (правда отвечу не раньше 16.00 по GMT+2). |
| Автор: youngprankster 20.3.2010, 23:48 | ||
Это был шаг отчаяния. Расчет на "вдруг покатит" Косяк был в кривом использовании мною массива - перешел на vector и все заработало Спасибо, за участие в решении проблемы, world |
| Автор: world 21.3.2010, 00:10 |
| Всегда, пожалуйста. |