![]() |
|
Модераторы: ginnie, korob2001 |
![]()
|
|
| Гость_antony |
|
|||
|
Unregistered |
Есть проблема.
При работе под Win32 с использованием Tk надо создать копию текущего процесса в асинхронном режиме. fork() под виндой не работает, и вызывает системную ошибку. Win32::Process::Create работать не хочет по непонятным причинам. Пытаюсь сделать примерно следующее:
Вызывается все это из уже запущенного процесса. Что еще для счастья надо? |
|||
|
||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 3 Всего: 28 |
Гость_antony я не знаю, что ты хочешь с помощью этого сделать, но читать документацию надо внимательно.
Зачем три темы было создавать? -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| Usya |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
Кто сказал? Работает. Правда не всегда. Когда то сам наткнулся на это:
Правда где-то читал, что Microsoft вроде бы обращалась с просьбой на счет исправления некоторых глюков. Может желтая пресса, но пока то, что есть. Кстати, можешь попробовать это
Сравни время начала и конца обоих процессов --------------------
Я не волшебник, я только учусь... |
||||||
|
|||||||
| smth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 30.8.2005 Репутация: нет Всего: нет |
sharq, большой разницы в коде я не вижу. В твоем коде явно указана подпрограмма обработки ошибки, а у меня нет. Вот, практически, и все. Если есть КОНКРЕТНЫЕ замечания/предложения - обсудим!
На самом деле, если в качестве параметров прописать какой-нить Notepad, то код работает. Вообще похоже на то, что с этой самой Tk Win32::Process не может создать второй процесс, ибо считает, что он дублируется. Почему? Как можно динамически выделить уникальный ID процессу? В некоторых примерах от CPAN при создании процесса применяется следующая конструкция:
и т.д. Здесь, насколько я понимаю, ProcessObj создает объект для текущего процесса, если его не было - хотя может быть я и ошибаюсь. Хотелось бы разобраться получше. Три сообщения это глюки експловера Usya спаибо за совет, только fork() вызывает системную ошибку, во всяком случае у меня на компе |
|||
|
||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 3 Всего: 28 |
smth разница в подключение модуля Win32. Запусти этот код, он рабочий, открывается командный интерпретатор perl. Только за чем тебе это.
Лучше скажи, что тебе нужно. -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| smth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 30.8.2005 Репутация: нет Всего: нет |
sharq! Блин! Мне не нужен интерпритатор! Мне нужна КОПИЯ ТЕКУЩЕГО ПРОЦЕССА!
Задача: написать мультиплатформенное приложение на перле с использованием интерфейса пользователя, т.е. модуля Tk. Это самое приложение должно иметь возможность открытия еще одной рабочей области, являющейся копией родительской. При этом оба созданных приложения дожны работать независимо друг от друга (наподобии "File/New->Window" в IE). Для решения данной задачи необходимо создать копию текущего процесса, что можно осуществить или вызовом fork() (который не работает под Win32) или использованием библиотеки Win32. |
|||
|
||||
| sharq |
|
||||||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 3 Всего: 28 |
smth
Тогда зачем ты используешь модуль Win32?
Приведи код и ошибку. -------------------- [color=gray]There's More Than One Way To Do It[/color] |
||||||
|
|||||||
| Usya |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
smth, а ты не пробовал работать с потоками?
Если нет, посмотри документацию к модулю threads и соответствующие примеры. --------------------
Я не волшебник, я только учусь... |
|||
|
||||
| smth |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 30.8.2005 Репутация: нет Всего: нет |
sharq
Потому что я могу динамически отпределить, в какой OS нахожусь. И, соответсвенно, юзать те или иные модули.
Винда убивает перловый процесс напрочь. При этом выкидывается стандартная тряпочка с предложением послать код ошибки в microsoft. Получить код ошибки от перла не получается. Usya Я задумывался над этим. В принципе, если не создавать копию процесса, а запускать новый поток и в нем уже запустить совершенно новый процесс - может и выгорит. Только мне уже из принципа интересно, почему не работают стандартные функции |
||||
|
|||||
| Usya |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
Стоп!
Я сам, правда с потоками не работал, только с процессами экспериментировал, поэтому кое-что могу и сам сморозить, но кажется ты немного путаешь понятия процесса и потока. На одном из сайтов видел это (правда было написано для Javi, но в данном случае думаю без разницы)
А с этим
действительно надо разбираться --------------------
Я не волшебник, я только учусь... |
||||
|
|||||
| sharq |
|
||||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 3 Всего: 28 |
smth
Не самый лучший вариант... но если по другому нельзя...
Привиде код скрипта! Интересно, что ты там написал. -------------------- [color=gray]There's More Than One Way To Do It[/color] |
||||
|
|||||
| smth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 30.8.2005 Репутация: нет Всего: нет |
sharq Что имено тебя интересует?
Скрипт? Там более 600 отлаженных строк в общей сложности. Как вызывается fork()? fork() || die "Cannot fork() $!"; Как вызывается Win32::Process::Create? См. выше. Как запускается под виндой скрипт с Tk? Смотри мануал. Что еще? Usya Согласен. Только мне никто и ничто не мешает создать новый процесс в отдельном трэде. Причем этот процесс будет изолирован от друго такого же полностью. Т.е. сначала создаем "оболочку". В этой оболочке нет ничего, кроме создания и управления потоками. При запуске для этой "оболочки" будет создан процесс. Если дочерних процессов (потоков) нет, создается отдельный поток, в котором запускается еще один процесс, выполняющий то, что нам нужно. Если появится необходимость создать еще один процесс, то из "оболочки" создаем еще один поток и - вуаля! - у нас два независимых потока с независимыми процессами. |
|||
|
||||
| sharq |
|
||||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 3 Всего: 28 |
Мне все равно, у тебя же не работает!
Ух ты, что прада именно так? -------------------- [color=gray]There's More Than One Way To Do It[/color] |
||||
|
|||||
| smth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 30.8.2005 Репутация: нет Всего: нет |
sharq Если все равно, зачем спрашивать?
|
|||
|
||||
| smth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 30.8.2005 Репутация: нет Всего: нет |
|
|||
|
||||
![]()
|
| Правила форума "Perl: Системное программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |