Процесс блокирует систему, что делать ?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Процесс блокирует систему, что делать ?

Сообщение student-uni » 07.12.2006 (Чт) 15:15

Код: Выделить всё
TStart = New ThreadStart(AddressOf BusyThread)
                            Thrd = New Thread(TStart)
                            Thrd.Start()


вот таким кодом запускаю нечто в подпрограмме BusyThread

так вот когда в подпрограмме BusyThread просто код - (доступ к БД или что угодно
поиск по диску итд) то блокировки системы нет
/даже когда например проблема с БД и без триады пришлось бы ждать ответа системы/
Окна переключаются
Триаду можно в любои момент убить
все ето происходит в отдельнои триаде


но стоит мне в BusyThread разместить старт процесса
Код: Выделить всё
Private Sub BusyThread()
        prcN = Process.Start(...)
    End Sub


/ подвешиваюшего процесса, ну например попытка доступа к неработаюсчеи Бд или старт нерабочего ВПН/
как система блокируется Окна не переключаются
не смотря на то что я запустил ето все в отдельнои триаде
и я не могу убить процесс

Почему ?
Как сделать процессстарт, чтоб если процесс вешает машину иметь возможность его убить
/иметь возможность переключиться в Нужное окно и кликнуть кнопку вызываюшую килл/

Спасибо

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 09.12.2006 (Сб) 10:40

Как сделать процессстарт, чтоб если процесс вешает машину иметь возможность его убить

Ну если процесс вешает всю машину, то чего ты хочешь от своей проги? Если только кнопку Reset программно нажать? :D
Не пробовал процессу давать приоритет поменьше?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 09.12.2006 (Сб) 11:17

Кстати, это ведь надо еще измудриться сделать, чтоб процесс подвешивал многозадачную систему наглухо (хотя конечно нет ничего невозможного).
Весь мир матрица, а мы в нем потоки байтов!

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 09.12.2006 (Сб) 13:25

Что Вы смеётесь ?
процесс стартует нерабочее OpenVPN соединение.
Систему он наглухо НЕ подвешивает. Другие проги можно стартовать.
Я не могу переключиться в окно моей проги,
чтоб нажать Cancel.
Собственно юзер может и подождать 2-3 минуты.
Но хотелось ему дать возможность прервать это ожидание.
И с соединениями Винды у меня это получилось.
Я стартую соединение в Триаде,
/Триада а в ней вызов АПИ/
и если оно (ВПН, Диалап итд)
не рабочее - то я могу через Cancel убить триаду
и прервать ожидание раньше чем получу ответ от АПИ, вызывающей
соединение.
При этом проблем с переключением нет.

Другое дело с OpenVPN,
здесь я вызываю не АПИ а ехе-файл да ещё и через Процесс.Старт
т.е. получается процесс в процессе.
/Триада а вней Процесс.Старт/
Но в этом случае я почему то не могу переключиться в форму и нажать Cancel

У кого какие идеи ?

2 Nord777
я думал на счёт приоритета и попробую, но дело наверно не в этом.
ведь по умолчанию приоритет у OpenVPN не может быть выше чем у моей проги. Скорее всего такой же. Но всё равно спасибо

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 09.12.2006 (Сб) 16:51

ты бы лучше сделал простенький примерчик, что бы он эмулировал твою проблему и выложил бы на форум. Глядишь и подсказали бы чего дельное. Может ты в коде допустил ошибку и в упор ее не замечаешь. такое бывает.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 37

    TopList