![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по потокам [D7, WinXP]
Русланка © (2005-09-01 15:48:00)Если у меня в главном модуле объявлены глобальные переменные, то сможет ли запущенный отдельный поток писать и читать данные из этих переменных?
Игорь Шевченко (2005-09-12 12:04:00) [1]
> 12. .exe переименовывть нельзя (априори дурной тон)
А вот фирма-разработчик Windows не видит в этом ничего дурного...
Игорь Шевченко (2005-09-12 12:02:00) [2]исполняемые файлы с любым расширением запускаются командой start
begin...end (2005-09-12 10:44:00) [3]> Defunct © (12.09.05 10:22) [86]
> Объяснения может быть только одно - возможно версия старая.
Версия 1.70. У Вас более новая?
> EXE является исключением.
Похоже, не только EXE является исключением. Измените расширение у word-овского документа на любое другое, и откройте файл в Word. Измените расширение у MP3-файла, и откройте его в Windows Media Player. Возрадуйтесь интеллекту программ фирмы Microsoft.
> Что мешает написать свой аналог Windows чтобы не использовать
> продукции MicroSoft?
> Могли бы и догадаться. Как всегда определяющий фактор -
> время.
Вы это к чему вообще? В [10] не используется SysUtils, и для определения имени ini-файла написана новая функция. Могли бы и догадаться, что как раз для экономии времени лучше было бы подключить SysUtils и использовать стандартную ChangeFileExt. Если же хочется сэкономить ещё и память, то можно и свою функцию написать -- лишь бы она не была глючной.
> Да и вообще нет смысла форматировать.
Дадад. Новый винчестер купил -- и сразу, без форматирования, систему устанавливай на диск, не содержащий разделов.
Defunct (2005-09-12 10:22:00) [4]begin...end © (12.09.05 08:57) [85]
> Кстати, сейчас попробовал запустить EXE-файл с изменённым расширением в FAR'е -- почему-то не получилось. Может быть, объясните, почему?
Объяснения может быть только одно - возможно версия старая.
> То есть как это? В [81] Вы говорите, что внутренний формат файла (а значит, и EXE-файла) можно определить ТОЛЬКО по его расширению
EXE является исключением. В [81] я говорил о любомфайле, в [82] написано где определение типа ведется строго по расширению.
> Что-то мешает написать свой правильный аналог ChangeFileExt, чтобы не использовать SysUtils?
Что мешает написать свой аналог Windows чтобы не использовать продукции MicroSoft?
Могли бы и догадаться. Как всегда определяющий фактор - время.
>> 17. Диск форматировать нельзя.
>LOL!
Некоторые форматируют диск с которого загружается система, и потом спрашивают почему не запускается Ворд.
Да и вообще нет смысла форматировать.
begin...end (2005-09-12 08:57:00) [5]> Defunct © (12.09.05 01:12) [81]
> Если этот стандарт по какой-то причине нарушается, то наносится
> вред в первую очередь пользователю, который позволил себе
> самовольное изменение расширения файла.
Предположим, я переименовал расширения некоторых исполняемых файлов и запускаю их из командной строки. Они нормально запускаются. Не могу понять, какой вред будет нанесён мне в этом случае.
А если они не будут нормально запускаться и работать из-за функций типа [10] -- так это уже промах программиста. И место таких программ, как уже и было сказано -- в Recycle Bin.
> Подытожив все сказанное, получим, что изменение расширения
> исполнимого файла - явление ненормальное, потому как наносит
> прямой или косвенный вред пользователям.
Оно может нанести вред. А может и не нанести. "Всякий овощ ..." (с)
> В данном контексте речь идет о дисциплине соответствия расширения
> файла его типу. Ибо другого способа определения внутреннего
> формата файла пока нет.
> Defunct © (12.09.05 05:04) [82]
> 4. Far запускает EXE файл по внутреннему формату, а не по
> расширению.
То есть как это? В [81] Вы говорите, что внутренний формат файла (а значит, и EXE-файла) можно определить ТОЛЬКО по его расширению (что само по себе смешно, поскольку в этой ветке уже приведено много примеров обратного), а в [82] -- что Far таки определяет внутренний формат, НЕ ориентируясь на расширение файла!
Кстати, сейчас попробовал запустить EXE-файл с изменённым расширением в FAR'е -- почему-то не получилось. Может быть, объясните, почему?
> 9. SysUtils занимает доп. память.
> 10. ChangeFileExt не является функцией WinAPI.
И что? Что-то мешает написать свой правильный аналог ChangeFileExt, чтобы не использовать SysUtils?
> Мне известно следующее:
> 17. Диск форматировать нельзя.
LOL!
Извините, но [82] не облегчило понимание Вашей точки зрения. Скорее наоборот.
Наиль (2005-09-12 08:37:00) [6]>[82]
> Мне известно следующее:
К сожалению этой фразой вы укрепили верность слов begin...end.
Потому как большинству не программистов, это не известно.
Из практики работы учителем, могу сказать, что большинство людей до 20 лет старается нарушить эти правила.
> Дабы вам было легче принять мою точку зрения, скажу
Уверен, что у begin...end, понимает Вашу точку зрения, но нет ничего предосудительного в его желании писать такие программы, которые продолжают работать, когда ОС уже висит.
Из своего личного опыта.
У нас в семье на троих был один компьютер. И если мне он нужен был для работы, то остальным для игр. Первым делом я стёр все игры. Но они появлялись снова. Тогда я пошёл на крайние меры. Все исполнимые программы переименовал в *.ехе (русскими буквами). Настроил их запуск и правильный показ в проводнике. А на стандартное расширение поставил запуск программы которая ругается страшными словами.
Выводы:
1. Расширение исполняемых файлов может быть отлично от exe.
2. Иногда, это делается не поглупости, а по необходимости.
Джо (2005-09-12 05:10:00) [7]20. Нельзя открывать в блокноте исполнимый файл и писать там макросы VBA (сам видел - клянусь!).
:)
Defunct (2005-09-12 05:04:00) [8]> begin...end
Дабы вам было легче принять мою точку зрения, скажу
Мне известно следующее:
1. Как работает функция CreateProcess.
2. Как работает загрузчик ОС.
3. Внутренний формат EXE файла.
4. Far запускает EXE файл по внутреннему формату, а не по расширению.
5. Start запускает EXE файл по внутреннему формату, если не находит соответствия в базе типов-расширений.
6. Explorer запускает файл строго по расширению.
7. В коде [10] есть более серьезные ошибки, которые могут привести к deadlock'у.
8. Обсуждаемая функция не блеск, но и не ламерская.
9. SysUtils занимает доп. память.
10. ChangeFileExt не является функцией WinAPI.
11. От пользователя можно ожидать всего, но его нужно приучать к дисциплине.
12. .exe переименовывть нельзя (априори дурной тон)
13. нарушение п.12 влечет за собой возможность нарушения последующих пунктов.
14. каталог %SYSTEMROOT% удалять нельзя.
15. boot.ini удалять нельзя.
16. Своп отключать нельзя.
17. Диск форматировать нельзя.
18. Вирусы писать нельзя.
19. Пакостить нельзя.
Defunct (2005-09-12 01:12:00) [9]> begin...end
> Однако непонятно, почему. И пока что никто не объяснил, почему это можно считать издевательством над ОС.
Тем, кто не работал в DOS, объяснить "почему"достаточно трудно. Если я ошибся в выводе относительно вашей практики работы в DOS, прошу извинить.
> Я не знаю, о какой дисциплине идёт речь.
В данном контексте речь идет о дисциплине соответствия расширения файла его типу. Ибо другого способа определения внутреннего формата файла пока нет.
> И в изменении пользователем расширения исполняемого файла я не вижу ничего ненормального.
Попробую вас переубедить. Если допустить переименование расширений файлов по принципу "от фонаря" где звуковые потоки назвать ".exe", видеопотоки - ".bmp", рисунки - ".mid" и т.п. наступит полная неразбериха и система будет не в состоянии определить, что делать с этими файлами, то ли скармливать процессору как исполнимый код, то ли скармливать какой-то программе как данные. Как следствие получим сбой в работе системы при определенных обстоятельствах.
Существует определенный общепринятый стандарт, который позволяет именно по расширению имени файла судить о его типе. Если этот стандарт по какой-то причине нарушается, то наносится вред в первую очередь пользователю, который позволил себе самовольное изменение расширения файла. Во вторую очередь (если допустить, что он распространяет файлы с заведомо неверным расширением) вредит и другим пользователям. Следовательно, произвольное изменение расширения файла наносит определенный вред (вызывает неразбериху при определении типа файла, что приводит в конечном счете к потере чьего-то времени), из чего следует, что изменение расширения исполнимого файла также наносит определенный вред. Нормальная работа системы приносит пользу. Ненормальная - вред.
Подытожив все сказанное, получим, что изменение расширения исполнимого файла - явление ненормальное, потому как наносит прямой или косвенный вред пользователям.
begin...end (2005-09-11 21:14:00) [10]> Defunct © (11.09.05 20:52) [78]
> Однако, я категорически против такого "издевательства" на
> ОС.
Однако непонятно, почему. И пока что никто не объяснил, почему это можно считать издевательством над ОС.
> Этими словами можно сказать вы разделяете мой взгляд на
> то, что Алексканд Панов придерживается дисциплины, а пользователь,
> который вдруг изменит расширение его ".exe" файла - дисциплины
> не придерживается.
Это не следует из сказанного мной в [77]. Я не знаю, о какой дисциплине идёт речь. А мои взгляды не изменились -- я считаю, что Александр Панов, используя функцию GetIniName из [10], поступает неправильно. И в изменении пользователем расширения исполняемого файла я не вижу ничего ненормального.
Defunct (2005-09-11 20:54:00) [11]извините, за опечатку в имени... никоим образом не хотел никого обидеть.
Defunct (2005-09-11 20:52:00) [12]> Вы про CreateProcess почитали?
Да конечно, еще могу добавить, что команда start тоже может запустить исполнимый модуль с любым расширением. Однако, я категорически против такого "издевательства" на ОС.
> Нет, я не хочу сказать, что вообще никакой дисциплины не должно быть.
Вот и славно. Этими словами можно сказать вы разделяете мой взгляд на то, что Алексканд Панов придерживается дисциплины, а пользователь, который вдруг изменит расширение его ".exe" файла - дисциплины не придерживается. Следовательно со своей стороны Александр Панов не в ответе за возможные глюки по вине пользователя.
begin...end (2005-09-11 18:50:00) [13]> Defunct © (11.09.05 18:38) [76]
> Он не будет использовать CreateProcess, он будет использовать
> проводник или WinCmd (или другой файл-менеджер).
Напрямую использовать CreateProcess -- не будет, а косвенно -- может. См. пример в [69]. Я не считаю умение человека пользоваться командной строкой сверхъестественным.
> После такого неопытные пользователи обычно переустанавливают
> виндовс.
И что? Главное, что EXE-расширение не является "гарантированно запускаемым", вопреки сказанному Вами.
Вы про CreateProcess почитали? Там написано, что он исполняет в созданном процессе указанный модуль (executable file). Из того, что он запускает не только файлы с расширением "exe", можно заключить, что у исполняемого файла не обязательно должно быть это расширение. И что принадлежность файла к исполняемым вообще определяется здесь не по его расширению.
С таким же успехом можно было бы сказать, что файл с расширением doc -- это гарантированно word-овский документ.
> PS: вы хотите сказать, что вообще никакой дисциплины не
> должно быть?
Нет, я не хочу сказать, что вообще никакой дисциплины не должно быть.
Defunct (2005-09-11 18:38:00) [14]> Это смотря чем запускать. Тут можно посоветовать про API-функцию CreateProcess почитать.
программы обычно пишутся для рядового пользователя. Он не будет использовать CreateProcess, он будет использовать проводник или WinCmd (или другой файл-менеджер).
> Если сопоставить расширению EXE какое-либо приложение
После такого неопытные пользователи обычно переустанавливают виндовс.
PS: вы хотите сказать, что вообще никакой дисциплиныне должно быть?
begin...end (2005-09-11 18:28:00) [15]> Defunct © (11.09.05 18:22) [74]
> Переименуй вы его в .JPEG или скажем в .wav результат от
> попыток запустить такой файл будет весьма плачевным.
Это смотря чем запускать. Тут можно посоветовать про API-функцию CreateProcess почитать.
Если сопоставить расширению EXE какое-либо приложение (причём с помощью стандартных средств Windows), то результат попыток запустить в "Проводнике" файл с этим "гарантированно запускаемым расширением" тоже может быть весьма плачевным. Так что никакое оно не "гарантированно запускаемое".
Defunct (2005-09-11 18:22:00) [16]begin...end © (11.09.05 18:11) [73]
> Что есть "гарантированно запускаемое расширение"?
Такое о котором в книжках по ОС, в данном случае по Windows, написано - executable file. Переименуй вы его в .JPEG или скажем в .wav результат от попыток запустить такой файл будет весьма плачевным.
begin...end (2005-09-11 18:11:00) [17]> Defunct © (11.09.05 17:54) [71]
> На любые другие расширения - плевать (они не являются гарантировано
> запускаемыми).
Что есть "гарантированно запускаемое расширение"?
begin...end (2005-09-11 18:05:00) [18]> Defunct © (11.09.05 17:54) [71]
Вы хоть читайте посты, на которые отвечаете.
В [16] был вопрос от Alexander Panov: "А какое может быть еще расширение у написанного мной исполняемого файла?". Я в [17] ответил: "Любое". Вы что, сомневаетесь в том, что Alexander Panov способен изменить расширение у файла или сразу указать расширение, отличное от "exe", в настройках проекта? Если сомневаетесь, то интересно, почему. А если не сомневаетесь, то только подтверждаете мои слова, и тогда [61] и [71] не в кассу.
Defunct (2005-09-11 17:54:00) [19]begin...end © (11.09.05 10:40) [67]
>>> Любое
>> нет не любое.
> Любое.
повторять одно и то же это нынче модно так?
нет не любое. только '.exe'. На любые другие расширения - плевать (они не являются гарантировано запускаемыми).
Джо (2005-09-11 16:10:00) [20]
> [69] begin...end © (11.09.05 15:57)
Честно говоря, не знал о таком финте. Действительно, запускается. В таком случае, действительно, проблемная ситуация может и случиться. Впрочем, все ямы которые может вырыть себе пользователь своими неумными действиями предусмотреть все-равно невозможно.