- 1
- 2
- 3
- 4
- 5
- 6
- 7
Сегодня был приятно удивлен тем, что цикл
for i:=0 to memo1.lines.count -1 do
...
приостанавливает работу, когда идет обращение к мемо (пользователь выделяет текст или печатает в этом мемо) до тех пор, пока идет обращение.
Очевидно, это такая фишка компилятора. Приятно, когда компилятор прикрывает спину.
[email protected] (Спросить Тараса)
безобидно выглядещее `memo1.lines.count` скорее всего делает SendMessage() который само собой разумеется подвисает (скорее всего лок) когда WndProc() уже обрабатывает какое-то сообщение.
как по мне - да, начинать с консоли имеет смысл.
хотя, зная как поверхностно обучение программированию в некоторых местах идет, консолью новичкам могут желание отобить учить программирование.
Консоль гораздо унылее, да.
самые интересные программы - вообще без консоли и гуя
D
Соль: http://en.wikipedia.org/wiki/Daemon_%28computing%29
P.S. По виндовой терминологии - служба.
[email protected] (Спросить Тараса)
[email protected] (Спросить Тараса)
Можно устроить обмен исходниками. Мой на питоне.
А не пошел бы ты в жопу?
D
var aBot:array[1..10] of TBot;
begin
//создаем и настраиваем экземпляр бота
abot[1].VoteAgainst;
abot[1].KeepCookie;
abot[1].Free;
Класс Бота базируется на IdHTTP. Объект создается автономно.
Куки-менеджер тоже создается автономно , т.е для каждого бота свой.
я сделаю вид, что не читал этого.
И не увидишь.
Вспомни, сколько я за тобой бегал, выпрашивая исходники. А ты мало того, что не поделился, так еще и наебал меня - не написал лс, хотя обещал. С моей стороны отношение будет соответствующим.
Сейчас речь идет об обмене, ситуация другая. И да, не хочешь - мне похуй.
Лс в данном случае - письмо мне на почту.
Исходники не дам: зачем? Чтобы ты впоследствие меня минусовал? Могу помочь с разработкой. Что тебя интересует?
Сюда по понятным причинам не могу выложить ссылку, а то мою программу использую против меня.
Т.е. ты считаешь, что ты не Неуловимый Джо, и кто-то будет тебя минусовать? :)
Мне вот, к примеру, просто лень регать десяток ботов ради этого бессмысленного минусяторства. А прога... да она пишется отсилы полчаса вместе с отладкой. Просто я не вижу в этом смысла.
Так что аноним прав, если и поюзают для чего-то твою прогу - просто почитать исходниики для интереса.
http://rghost.ru/48083698
пароль - 1600
А то еще подумаете, что я - гондон. Нет, батеньки мои. Я люблю пофлудить и потроллить, но гондоном я никогда не был.
[email protected] (Спросить Тараса)
1. Приостанавливает работу код TMemo (или что там у нас) из библиотеки VCL. Библиотека не компилятор. Сердце не камень, работа не волк, все лгут.
2. Цикл ни при чём. Я уже писал, что цикл for в потомках Турбо Паскаля отличается от сишного тем, что интервал счётчика вычисляет только один раз.
Если честно, не понял. Просвети?
Значение выражения memo1.lines.count - 1 будет посчитано один раз и сохранено в регистре перед началом цикла.
P.S. И что-то мне намекает, что тот самый memo1.lines каждый раз вытрясает из мемы текст а затем разбивает его на строки.
А мема — внук TCustomEdit'а:
http://www.pictureshack.ru/images/89Trololo-tonko.jpg
var
P: PChar;
SelStart, Len: Integer;
begin
SelStart := GetSelStart;
Len := GetSelLength;
SetString(Result, PChar(nil), Len);
if Len <> 0 then
begin
P := StrAlloc(GetTextLen + 1);
try
GetTextBuf(P, StrBufSize(P));
Move(P[SelStart], Pointer(Result)^, Len);
finally
StrDispose(P);
end;
end;
end;
Вспомнил, как я извращался с PureBasic, когда еще не знал дельфей.
Царь прав, к сожалению, насчет неудобства ООП. В ООП'шных прогах легко изучать и перепиливать локальные куски, в пределах одного класса. Зато, когда надо понять причину какого-то мало-мальски сложного поведения, приходится перекапывать горы исходников.
Процедурный код этому рассеиванию логики подвержен в меньшей мере.
А если вообще без наследования - все не хуже и гораздо лучше читается.
А если без наследования и полиморфизма, то, внезапно осталось то самое си с классами, которое любит упоминать царь ;) Использование классов только ради инкапсуляции.
>статика
Часто такое встречается? :)
>си с классами, которое любит упоминать царь
Я уж забыл - в каком тоне он это упоминает?
Да в любом месте, где по-настоящему поюзан полиморфизм :)
> Я уж забыл - в каком тоне он это упоминает?
Насколько я понимаю, что-то среднее между богомерзким с++, который царь не признает за язык, и божественной сишечкой, которую царь любит.
Ух ты, а примерчик можно, где в статике динамический тип что-то наследует? :)
То есть, царь не признает классы или хотя бы их эмуляцию в си? Я всегда знал, что он поехавший, но сейчас у меня есть доказательства. Хотя, если учесть, что он ни одной программы сложнее обхода массива не написал, действительно - зачем тут классы-то...
> примерчик можно, где в статике динамический тип что-то наследует?
Поясните мысль. Я подозреваю, что борманд имел в виду что-то вроде
Да любой парсер, составляющий AST - там тип ноды зависит от прочитанных данных. И не взглянув на входные данные и процесс построения невозможно сказать, на какой именно класс ссылается некая ссылка. Известен только родительский класс/интерфейс, не более того.
> Я подозреваю, что борманд имел в виду что-то вроде
Ага, именно это.
разработчикам clang - ежедневно
Приходилось пару раз. Но суть проблемы вы не уловили походу.
Любая задача, юзающая полиморфизм, имеет точно такую же траблу. Разделяются момент создания объекта (фабрика или что-то подобное) и момент его использования. Из-за этого без отладчика/логов порой трудно понять, че там вообще создавалось и вызывалось.
В точке создания совсем непонятно, что будут делать с объектом. В точке вызова совсем непонятно, что же там за объект (т.к. полиморфизм). Вот это я и хотел показать ;)
Даже если оно добавляет проблем в одном месте, оно убирает их из другого, иначе бы полиморфизмом никто не пользовался.
Да с этим я и не спорю ;) Любая парадигма это куча компромиссов, дающих где-то удобство, где-то неудобство, а где-то полный фейл.
В этом смысле полиморфные функции более показательны. Например:
Просто люди когда слышат "полиморфизм", почему-то всегда начинают думать о наследовании (хотя это не обязательно, и, вообще возможно, что в вышеприведенном примере полиморфизм не использовался - мы же не знаем, есть ли у разных фигур методы с одним именем, но разной реализацией).
>>>Царь прав, к сожалению, насчет неудобства ООП.
Нашел авторитета для цитирования.
Тарас об этом (oop isnt silver bullet) с самых ранних тредов твердил, когда еще сюда Пушков приходил отстаивать кресты.
Кресты выпали в осадок?
Их поливают говном практически с самого основания ресурса. Это традиция кстати.
Нет. Lines - объект типа TMemoStrings, его метод получения строки выглядит так:
[email protected] (Спросить Тараса)
i: integer;
begin
Screen.Cursor := crHourGlass;
try
for i := 0 to memo1.Lines.Count - 1 do
begin
// Здесь делаем все что нам нужно
Application.ProcessMessages; // это не забываем делать чтоб не тормозило ))
end;
finally
Screen.Cursor := crDefault;
end;
end;
[email protected] (Спросить Тараса)
Ка-питан, ты слиш-ком дол-го пла-вал.
С уважением, Ваш Стертор.