Страница: 1 | 2 | 3 | 4 |
Вопрос: Shell - дождаться конца
Добавлено: 30.10.04 07:29
Автор вопроса: magish
Ответы
Всего ответов: 50
Номер ответа: 16
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #16
Добавлено: 30.10.04 21:17
Тем ни менее у этого способа существует пара недостатков, и я все-равно сомневаюсь в том что на VB реально создать устойчивое многопоточное приложение, и в том что это действительно того стоит...
Номер ответа: 17
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #17
Добавлено: 30.10.04 21:18
2cresta: Да про что ты говоришь блин?Спрашивают "Как на ВБ такое реализовать", я ответил, что поток не создаш в ВБ чтобы не разрушить прогу (возможно, но гемора очень много), а ты далее повторяешь "поток, поток", сори плиз, но ты ошибся форумом, это не С/ASM/Delphi форум, здесь все "на порядок выше", это ВБ!
Номер ответа: 18
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #18
Добавлено: 30.10.04 21:20
могу написать пример с таймером и с длл'кой. Теперь обращяюсь к автору: делать примерчики?
Номер ответа: 19
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #19
Добавлено: 30.10.04 21:22
Подумайте головой, дорогой cresta, задача пустяковая, так зачем использовать для єтого то, что добавит 90% гемора?
Номер ответа: 20
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #20
Добавлено: 30.10.04 22:51
DaSharm
Да при чём VB здесь? Вопрос в том, какими путями можно достигнуть цели (цикл-таймер-поток). Если на то пошло, если говорить о пустяковости, то в контексте достижения конечного результата самый простой и доступный метод тот, который предложил sne. Минимум кода. Проще всего реализовать на VB. Если начинать состязание в супер-пупер навороченности кода, то можно сделать как я предложил, или прицепить dll, или ещё бог знает что.
Касательно того, что отдельный поток разрушит основную прогу - не обязательно. Я пока не разобрался с одним моментом, а так и на голом VB сделал запуск процесса калькулятора из отдельного потока. Не могу пока понять, почему калькулятор запускается с SW_HIDE (т.е. в списке процессов он появился, из таскменеджера я могу его убить, при этом срабатывает WaitForSingleObject и оповещает, что процесс закончился). Думаю и это можно обойти. Если корректно относиться к созданному потоку, никто не рухнет, и никаких коллизий нет.
Если надо пример с Dll - пожалуйста, есть, работает, никаких проблем, сообщение о завершении процесса можно можно вернуть как в оконную процедуру, так и чисто по VB-шному: изменить текст к примеру в текстбоксе, и в событие EventBox_Change вписать необходимую реакцию на завершение калькулятора.
А насчет головы - осторожней.
Номер ответа: 21
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #21
Добавлено: 30.10.04 23:06
Всмысле )) ?
Номер ответа: 22
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #22
Добавлено: 30.10.04 23:10
Думай головой, прежде чем предлагать подумать головой
Вот код VB-exeшника:
Private Declare Function CreateThr Lib "ThreadDLL" (ByVal ExeName As String, ByVal BoxWnd As Long) As Long
Private Sub Command1_Click()
 im s As String
s = "C:\Windows\NOTEPAD.exe"
EventBox.Text = "hTread = " & CreateThr(ByVal s, ByVal EventBox.hWnd)
End Sub
Если dll нужна, могу приложить
Номер ответа: 23
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #23
Добавлено: 31.10.04 00:01
2cresta, если хочешь, можем поговорить о потоках в VB Я уже замучался дизассемблировать и разбираться Но одно я понял точно, что у VB конкретные проблеммы с памятью и со стеком возникают, когда одновременно работают два потока...
ЗЫ
Раньше я предполагал что ошибка возникает из-за повторной инициализации SEH, но это маловероятно...
Номер ответа: 24
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #24
Добавлено: 31.10.04 00:42
sne, не понял, что ты дизассемблировал? VB-код? Если да, то могу сказать, что один раз заглянул дизассемблером в VB-код, больше желания нет Сплошь одни
CALL DWORD PTR DS:[<&MSVBVM60.__...
Дизассемблировать MSVBVM60 что-то нет охоты Проще по-человечески вынести создание потока в длл, и делать там что угодно и как угодно. И возможно, правильней. ИМХО, неудобно вилкой в носу ковырять, для этого лопата есть, а вилкой можно пораниться
Только ради спортивного интереса можно пытаться на VB делать потоки. Вот сейчас буду разбираться, почему калькулятор, запускаемый из отдельного потока, запускается с SW_HIDE. Если что получится, тогда скажу как сделал.
Номер ответа: 25
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #25
Добавлено: 31.10.04 01:26
ну да, я создавал тестовое приложение на VB и сидел в отладчике следил где что и как вылетит...
Если долго посидеть, то к VB коду начинаешь привыкать
Номер ответа: 26
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #26
Добавлено: 31.10.04 01:29
- слова обречённого ))
Нее.. лучше не привыкать
Номер ответа: 27
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #27
Добавлено: 31.10.04 10:02
2Cresta: гон, я и сам напишу длл'ку создающую другой поток, с stdcall библами это просто Просто импортируешь ф-цию и она ведь сама создаст поток, а это уже юзательство, это не на ВБ. Конечно, я могу создать на ВБ stdcall библу, но оно того стоит?
Номер ответа: 28
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #28
Добавлено: 31.10.04 12:29
По-моему гонишь как раз ты
1. Я в вопросе не заметил, чтобы автор просил именно на VB.
2.На VB только идиот будет создавать потоки. Их можно пытаться сделать только из спортивного интереса.
3.Весь VB это и есть "юзательство" от начала и до конца. Начиная с msvbvm60 и заканчивая сторонними dll. Ты ничего сам не можешь сделать, только юзать msvbvm60.
И если сторонняя dll позволяет сделать надёжней и проще, то почему я должен тупо упереться в "родную" msvbvm60.dll, заранее зная что это обречено на неудачу? Такой подход к делу заставляет усомниться в умственной полноценности.
А выбирать между двумя альтернативами:
а)надёжность + правильностью работы приложения
б)использовать только msvbvm60.dll
- это дело автора топика.
Номер ответа: 29
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #29
Добавлено: 31.10.04 15:52
>Я в вопросе не заметил, чтобы автор просил именно на VB.
Ну, конечно, єто ведь форум по С++!
А я ведь предложил 2 способа зделать это без ДЛЛ: WaitForSingleObject и таймер.
Что же порекомендовал ты?Создать поток. Похроду разобравшись, что поток можно создать только с помощью сторонних ДЛЛ вышло:
Я рекомендую: WaitForSingleObject и таймер
Ты рекомендуешь: левую ДЛЛ
Кто, блин, из нас прав???Я такой программер, что просто не выносит присутствия Активиксов и не виндосовских длл-ок. Для меня, использовать для какого-то пустякового запуска проги целую БИБЛИОТЕКУ немыслимо!Ну ладно, все, хватит.
У нас есть три варианта:
1.WaitForSingleObject
2.таймер
3.длл
Что выберет автор?
Номер ответа: 30
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #30
Добавлено: 31.10.04 18:24
Я рекомендую: WaitForSingleObject и таймер
Ты рекомендуешь: левую ДЛЛ
DaSharm, не надо убеждать меня, что "код", который стряпает VB, правильней, чище, надежней, меньше, чем ассемблерный код. Ты прекрасно знаешь, что это не так, что нет ни одного плюса в сторону VB кода.
использовать для какого-то пустякового запуска проги целую БИБЛИОТЕКУ немыслимо
То, что ты будешь описывать в процедуре таймера, займет объёма не меньше, чем эта "ЦЕЛАЯ БИБЛИОТЕКА", объём которой 2.5 кБ. И попробуй осуществить запуск пары десятков экземпляров приложения и отследи окончание каждого из них. Во что превратится твоя процедура таймера? Не задумывался? Зря.
Я такой программер, что просто не выносит присутствия Активиксов и не виндосовских длл-ок
ActiveX - это твой путь. Если память не изменяет, то это ты писал всякие там контролы типа Тяга. Я ни одного котрола не написал, всегда код. С нуля. Каждый раз.
Кто, блин, из нас прав???
Я сильно сомневаюсь, что автору вопроса очень уж интересен этот диспут. Возможно он даже не заглядывает в этот топик Кроме нас сюда только sne заглядывает. Вот пусть он нас и рассудит, ок? Кинешь ему свой код с таймером, я кину код своей dll, пусть поглядит, на предмет того, что и как сделано, что бы он сам для себя выбрал.
Sne, ау, ты где? Рассуди нас...