Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 |

 

  Вопрос: Shell - дождаться конца Добавлено: 30.10.04 07:29  

Автор вопроса:  magish

Ответить

  Ответы Всего ответов: 50  

Номер ответа: 16
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #16
Добавлено: 30.10.04 21:17
Тем ни менее у этого способа существует пара недостатков, и я все-равно сомневаюсь в том что на VB реально создать устойчивое многопоточное приложение, и в том что это действительно того стоит...

Ответить

Номер ответа: 17
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #17
Добавлено: 30.10.04 21:18
2cresta: Да про что ты говоришь блин?Спрашивают "Как на ВБ такое реализовать", я ответил, что поток не создаш в ВБ чтобы не разрушить прогу (возможно, но гемора очень много), а ты далее повторяешь "поток, поток", сори плиз, но ты ошибся форумом, это не С/ASM/Delphi форум, здесь все "на порядок выше", это ВБ!

Ответить

Номер ответа: 18
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #18
Добавлено: 30.10.04 21:20
могу написать пример с таймером и с длл'кой. Теперь обращяюсь к автору: делать примерчики?

Ответить

Номер ответа: 19
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #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-сайт: dasharm.com
 Профиль | | #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()
    ;Dim 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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: dasharm.com
 Профиль | | #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-сайт: dasharm.com
 Профиль | | #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, ау, ты где? Рассуди нас...

Ответить

Страница: 1 | 2 | 3 | 4 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам