- 1
- 2
- 3
- 4
try {} finally {
retVal = NativeMethods.CreateProcess ( /* ... */ );
/* ... и дальше остальной код... */
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+111
try {} finally {
retVal = NativeMethods.CreateProcess ( /* ... */ );
/* ... и дальше остальной код... */
}
Откопано в исходниках .NET 2.0 Framework, так реализуется Process.Start. Не очень понял замысла. Нашёл, что finally обязательно продолжит исполняться, если во время его исполнения на поток ВНЕЗАПНО вызван метод Abort. Т.е. если потоку, создающему процесс, сделать аборт, процесс всё равно упорно создаcтся и запустится (чистки памяти я не нашёл). В чём смысл? Так можно было бы тогда всякий код оборачивать в finally... Ящитаю, что это всё костыли вокруг говноархитектуры. Не зря в Яве Thread.stop сделали deprecated. А вы как считаете?
comnimh 27.04.2010 03:15 # 0
А нельзя :(
striker 27.04.2010 14:18 # 0
striker 27.04.2010 14:19 # 0
comnimh 27.04.2010 14:23 # 0
comnimh 27.04.2010 14:30 # 0
С адресом http://govnokod.ru/comments/2837/rss
striker 27.04.2010 14:31 # 0
comnimh 27.04.2010 14:48 # 0
guest 27.04.2010 14:54 # 0
striker 28.04.2010 00:54 # 0
guest 28.04.2010 17:03 # +2
guest 28.04.2010 18:09 # −3
da4ever 29.04.2010 15:57 # 0
unfunk 29.04.2010 16:02 # 0
guest 29.04.2010 19:11 # 0
unfunk 29.04.2010 19:21 # 0
striker 29.04.2010 23:28 # 0
кстати, уберите, пожалуйста аватарку, похожую на аватарку гвеста, не путайте людей. спасибо
cfdev 30.04.2010 01:20 # 0
там говноэффект:
"Ошибка
запрошенный виртуальный сервер не существует или перегружен"
striker 30.04.2010 02:53 # 0
Страница проекта на google.code
http://code.google.com/p/govnokod/
cfdev 30.04.2010 05:19 # 0
striker 30.04.2010 05:25 # 0
Надо будет прикрепить в топ лучшего говнокода :)
guest 27.04.2010 08:03 # 0
guest 27.04.2010 08:24 # 0
Karasb 27.04.2010 08:33 # 0
guest 27.04.2010 09:12 # +1
Возможности прервать CreateProcess нет, а значит - процесс должен быть создан до конца.
guest 27.04.2010 14:16 # 0
guest 27.04.2010 13:03 # +2
guest 27.04.2010 14:18 # −1
guest 27.04.2010 15:42 # −1
guest 28.04.2010 20:52 # −1
cfdev 27.04.2010 16:12 # +3
cfdev 27.04.2010 16:16 # +2
Ферштейн, инженер с однолетним стажем? :)
bober_maniac 27.04.2010 19:41 # +2
MS и так уже имеет проблемы с тем, что поток, который крутится в CER-регионе в вечном цикле, сбросить, не повредив CLR вообще нельзя. Потому что в отличие от жабы, где все крутится под жесткой виртуальной машиной, защищенной 10 слоями абстракций, CLR гораздо глубже интегрирована в родительскую ось, и многие вещи в ней являются просто гейтами к unmanaged underlayer.
У CLR должна быть возможность всегда сбросить тот или иной поток, в случае закрытия приложения (что не так важно, там можно работать на низком уровне) или выгрузки домена. Последнее - очень важно, так как домены - это изобретение .NET Framework и ось о них ничего не знает.
cfdev 27.04.2010 19:55 # +2
> виртуальной машиной, защищенной 10 слоями абстракций, CLR
> гораздо глубже интегрирована в родительскую ось, и многие вещи в
> ней являются просто гейтами к unmanaged underlayer.
Это заблуждение, виртуальная машина нета - такая, же как у жабы. Просто у нета более прозрачный для программиста способ обращаться к системе (PInvoke). И всё зависит от конкретной платформы, CLR под винду - да, простые гейты, но с точки зрения спецификации "чудная" корреляция между поведением винды и CLR - просто "совпадение". Это особо ни на что не влияет, просто _такая_ логика системы. Логика жабы может быть более понятна линуксу, но мене понятна винде. И? Тьюринг-полная машина может какую- угодно логику переваривать. Под моной, например, под Линукс, сделан слой win-io-layer. И?
Вот с доменами может быть, да, я там особо не курил :) В любом случае, вырубать поток на полпути должно быть только крайней мерой, это, имхо, всё равно говноархитектура.
И, разумеется, претензий не было бы, если бы Майкрософт не называло своё детище "кросплатформенным фреймворком". Если бы назвали что-то типа "com+ 2.0" - был бы другой разговор.
bober_maniac 27.04.2010 20:17 # +2
Кроме того, CLR организует еще один уровень абстракции и защищает программиста от его собственной глупости (например, от вечного цикла в непрерываемом потоке, хотя, я кажется, об этом уже писал). Защитные абстракции - это последняя брешь обороны в сложном коде. В принципе, никто не мешает не использовать ООП, например, а использовать структуры и процедуры, принимающие их на обработку, однако инкапсуляция помогает выдерживать собственные ограничения.
Вырубать поток на полпути - действительно, крайняя мера. CLR поступает так в очень редких случаях, и среднестатистический программист на C# никогда не слышал о ThreadAbortException. Однако, в корневой библиотеке нельзя забывать о мелочах.
guest 27.04.2010 14:20 # +1
guest 28.04.2010 18:10 # −3
guest 28.04.2010 20:52 # −2
guest 30.04.2010 12:35 # −2