| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Как убить соданный threads? |
| Автор: wolter 20.2.2008, 17:29 | ||
Вот такой простой коди, надо чтобы саб выполнялся в своем отдельном потоке, но при кждом нажатии кнопку обьем сожранно памети программой увеличиваеться
|
| Автор: wolter 21.2.2008, 19:56 |
| Вот тебе и форум программистов, ни одного ответа за 3 дня..... |
| Автор: nitr 22.2.2008, 02:50 |
| http://www.citforum.ru/howto/smart-questions-ru.shtml |
| Автор: wolter 22.2.2008, 09:33 |
| nitr, И это все на что хватило вашего опыта программиста ? Читая правила и советы чужого форума я врядле узнаю как мне добиться эффекта, чтобы по окончании потока, поток вычищал себя из памяти! |
| Автор: shamber 22.2.2008, 12:59 |
| wolter, Вы утомительны со своими наездами. Но Вы еще и спасибо говорить забываете... |
| Автор: wolter 22.2.2008, 13:04 |
| shamber, Вас не кто не застовляет их читать Добавлено через 47 секунд Вообщем тему можно закрывать, ответитьна мой вопрос "как очистить память после потока" не кто не смог... |
| Автор: shamber 22.2.2008, 13:06 |
| Ну так и закройте.... Вы же ее создали. З.Ы. платочек подарить? |
| Автор: wolter 22.2.2008, 13:20 |
| shamber, Если Вы такой умник, ришение данной проблемы подарите |
| Автор: wolter 22.2.2008, 18:47 |
| PanamOS, Вопрос КОРЕКТНО был задал названии темы "Как убить соданный threads? ", далее в теме обьеснялось зачем мне это надо, по поводу того что комуто он был не понять, так тут уж простите, те кто не поняли могли просто переспросить, поверте мне я над этим вопрос кабаючь уже более 9 дней и если я тут начну сейчас перечеслять какие мотоды я перепробовал, то Вы все просто устаните читать, я не хочу чтобы мн едали готовое ришение, мне надо просто показать пример как мне к нему прийти, на мой взгляд форумы созданы для того чтобы люди черпали из них информацию, причем информацию конкретно по теме форума и поста. Когда я вижу когда люди задают вопрос я не отвечаю им в стиле иди читай правила или найчись конкретно задавать вопросы, я стараюсь вникнуть в проблемму человека, к сожилению наверно я такой один или со мной одним что то не так. Данный вопрос для меня остаеться открытым уже очень довно, но из всех методов я не нашел ни одного верного. |
| Автор: ginnie 22.2.2008, 19:19 | ||
wolter, проблему создал автор комментария
Так что все замечания относятся не к Вам (автору основного вопроса), а к нему (автору вышеуказанного комментария). |
| Автор: PanamOS 22.2.2008, 19:54 | ||||||
Информация не появляется просто так, ею делятся другие люди.
Иногда проще прочитать 1 раз за х-ххх минут, чем тратить время, на проработку методов, которые возможно Вы уже попробовали.
Во многих случаях пример является готовым решением. Я сделал вывод про готовое решение, на основании других тем, где не смотря на подсказанное направление Вы продолжали постить что-то типа
Все про тот же линк, возможно Вы просто выбрали неверное направление решения своей проблемы, возможно еще на уровне проектировки Вашего приложения. Может быть задачу будет удобнее решить кардинально другим путем, вот про это и шла речь, что вопрос про Вашу текущую проблему в данный момент, а не про решение чего-то в целом. |
| Автор: wolter 22.2.2008, 23:17 | ||||
| PanamOS, Если Вы внимательно посмотрите мои предедущие посты, увидите, что сама проблемма и ее ришение возникли именно по причине того, что вориантов и небыло ни каких как пример: как сделать программу с ИНТЕРФЕЙСОМ, чтобы при выполнение какого либо саба, сам интерфейс не зависал, до до завиршение этого самого саба!? ответ: только через поток (интерфейс остаеться работать, без подвисов, а в потоке выпалняеться нужный саб, выдавая только нужные нам данные) Речь не инед о какомто конкретном примере, тут проблемма во всей архетектуре программы, я думаю если любой кто читайл данный топ возмет выше указанный код, и его запустить сам по себе зайдет в тупик, Вы хотябы для самих себя найдите ришение и только потом говорите что я изначально что то сделал не так. По поводу перл доков, информации о том как вычистить память после фрока в них точно нету, фокусы типо "undef $thread;" тут тоже мало чем помогут, есть еще вот такая статья http://compfaculty.net.ua/misc/?a=102 , но описанный там метод, я так понял приемлел только для *nix систем потому как на
ActiveState ActivePerl 5.8 выдает
Я думаю конкретно мой вопрос интиресен многим, потому как рищение данной проблеммы как котовой либо нет либо найти ее просто не реально |
| Автор: PanamOS 23.2.2008, 04:01 | ||
wolter,
ошибок не выдает, но не в этом суть. Если Вы еще раз внимательно перечитаете мануал, на который Вы дали ссылку, то поймете, что Вам нужно сделать. |
| Автор: wolter 24.2.2008, 15:31 |
| Что то я нефига не могу понять КАК ТРЕЙД ПОСЛЕ ЗАВИРШЕНИЯ ВЫГРУЗИТЬ ИЗ ОПИРАТИВНОЙ ПАМЯТИ системы..... |
| Автор: anwe 24.2.2008, 17:41 |
| wolter, может у тебя подгружаются еще незагруженные ддл-ки. Выгрузи их. |
| Автор: wolter 24.2.2008, 21:25 |
| Какие ДДЛки? проблемма в том что после нажатия на кнопочку "добавить поток" ОС создает ячейку памяти размером 1.6мб, так сказать ячейку где трейду можно было бы развернуться, после того как трейд отработал, из списка потоков он сам себя удаляет, но резерв в 1.6 всеровно остаеться занятым, по логике Perl`a? это делаеться для того, а мол программа еще раз будет использоваться поток и чтобы ей еще раз не "откусывать" 1.6 мб памяти, Perl продолжает ее держать, но дело в том что поток каждый раз создаеться с новым ID... во всех других языках есть какието команды которыми можно удалить этот резерв, а вот в перле что почемуто нету... |
| Автор: PanamOS 24.2.2008, 22:13 | ||
У меня Ваш пример с минимальными изменениями работает замечательно, память отдает. Посмотрите предыдущий свой код с потоками, там где Вам нужны были таймеры, сравните с этим кодом, который тут, посмотрите чего не хватает, почитайте ман по потокам. |
| Автор: wolter 24.2.2008, 22:25 |
| В преддыдущем моем коде, потоки не создовались каждый раз они просто работали в безконечном цыкле, поэтому там проблем с памятью небыло, манул по потокам я выучил уже как отче наш "хотя может я чтото самое важно и не понял" может быть проблемма именно в самом Perl`e у меня ActiveState ActivePerl 5.8 |
| Автор: wolter 25.2.2008, 03:55 |
| есть вот такая штука http://search.cpan.org/~jdhedden/Thread-Cancel-1.07/lib/Thread/Cancel.pm но после устоновки и запуска, мой перл мне говорит threads version 1.39 required--this is only version 1.00 at C:/Perl/site/lib/Thread/Cancel.pm line 8. напрашиваеться в полне логический вопрос, как поднять версию моего текущего трайда, на перл 5.10 переходить не хочеться)) там есть Win32::GUI )) Добавлено через 46 секунд Не я точно на дурку скоро переду |
| Автор: PanamOS 25.2.2008, 05:25 |
| ... |
| Автор: wolter 25.2.2008, 08:53 |
| PanamOS, интиресно что же ты мог редоктировать в совем последнем сообщении |
| Автор: wolter 25.2.2008, 11:58 |
| Нашел еще одну проблему, вотhttp://trouchelle.com/ppm/threads.ppd есть ppd для трейда 1.67, ставлю его себе, пытаюсь юзать его новые фнкции, перл мне выдает threads version 262144 required--this is only version 1.00 at C:/Perl/lib/Exporter/Heavy.pm line 121. потом иду дальше деисталюрую модуль с трейдом, он ествественно удалает тот который 1.67, пытаюсь удалить еще раз (тот который идет вместе с перлом) на что ppm естевствено мне отвечает что, мол, дружище, такого модуля нет. Мне кто то может подсказать что я делаю не так ? |
| Автор: wolter 26.2.2008, 00:39 | ||
| Итак госпада, оказываеться перл отлично работает с нитями или как их называют трейдами и все отлично он возврощает память, оказываеться всгото навсего надо было просто поставить версию перла более свижее вот этот код работает разпрекрасно, занимая всего то 8 метров памяти
в старой версии (5.8.2) на )->detach(); перл просто вылитать с ошибкой, а в версии 5.8.8 он прекрасно отрабатывает и возврощает память ОГРОМНО СПАСИБО ВСЕМ кто принимал участия в ришение данной проблеммы P/S/ У все у кого есть так называемые трейды "зомби" просто ставте новую версию перла. |