- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
procedure tmythread.execute;
procedure fillmemo;
begin
form1.memo1.lines.add('Some string');
end;
begin
synchronize(fillmemo); //[Error] Unit1.pas(54): There is no overloaded version of 'Synchronize' that can be called with these arguments
end;
А почему оно не компилится - я х.з. Надо смотреть сигнатуру synchronize'а. Возможно он со спецом не жрет вложенные функции.
О нормальных лямбдах, которые должны проканать на 2009: http://8vmr.livejournal.com/6114.html
Реквестирую в тред Тараса, чтобы он меня поправил и обозвал нубом, не знающим делфи.
ведь не пидорасит.
p/s/
Василий,если Вы здесь,срочно забаньте ботов - форум спамят.
Ну да, резонно. Синхронайз же текущий поток держит в спячке, пока функция до конца не выполнится.
Тогда попробуй передать @fillmemo вместо fillmemo. Вроде же в паскале так делали указатель на функцию, а fillmemo - ее вызов.
P.S. Я в делфи реально нуб.
Ой, не скромничайте )
Вопрос только в том, кто успеет первым?
Не важно. Упрощу код для понимания.
Что произойдет? UB. Хоть упадет.
Нельзя такую хуйню делать. @ это чтобы убрать проверку соответствия процедурных типов с непредсказуемыми последствиями.
Костыли уже встроены в язык?
> synchronize(ololo);
то есть оно таки принимает не процедуру, а делегат
Это в каком таком потоке я хуй?
Не тарас, но потому что старый дельфи не может в замыкания. А вложенная процедура - это таки замыкание (могло бы быть), т.к. имеет доступ к локальным переменным вызвавшей процедуры.
Разумеется код ниже работает т.к. там нет доступа к локальным переменным, только к полям объекта.
Насчет дохнут - а как компилятору это разрулить? Молча разрешать брать на них указатель и потом крашиться?
Для сравнения в gcc чтобы работали указатели на вложенные функции, пришлось делать трамплины. Т. е. в gcc замыкания — это уже не чистые функции, а что-то похожее на методы объектов (хотя в няшной по стандарту ООП нету).
В стандартном же Паскале не было процедурного типа, но был тип аргумента procedure, а как там было со вложенными функциями, не знаю. Некоторые реализации стандартного Паскаля компилировались не в нативный код, а в P-code, так что там возможность реализации всяких фишек зависела от виртуальной машины.
Авотхуй.
Кстати в Аде передаются, но только если ты скажешь, что sort принимает именно замыкание, а не функцию. Кстати синтаксис описания замыкания в Аде эээ отсутствует. Надо писать
И затайпдефнуть эту хрень никакого способа нету!!! И это в Аде, что везде и всегда заставляет каждый чих тайпдефить!!!
Кстати я в натуре не знаю, как при перегрузке надо звать указатель на функцию, чтобы было однозначно.
Как? Статик каст? Промежуточная переменная?
Ещё можно так:
bind можно выкинуть, передав &a в конструктор B. Правда чтобы не выводить самому шаблон ST в B - можно написать функцию генератор. B конечно может быть не шаблонным, если случай как здесь достаточно частный.
Почему нельзя написать
auto fc = f(char)?
Ну почему нельзя? Можно.
Только не заработает. Пишите свой язык. Ктож запрещает? Особенно если для себя.
КРЕСТОКОСТЫЛЬ
на гейдеве с год назад был такой же дельфинодеятель, который жаловался на +4 (8) байта памяти для "делегатов" в ненавистных крестах и писал свою надмозговую крестовелобиблиотеку, дежавю
АЗАЗА Я ТИБЯ ЗАТРАЛЕЛ КРИСТАБЛЯДЬ У ТЕБЯ ПУКАН ПОРВАЛО ПАТАМУШТА Я ТОНКИЙ ТРОЛЛЬ ))0000
странно, что тут до сих пор кто-то не понимает здорового армейского юмора
какой моральный облик ты хотел увидеть?
> моральный облик
Кстати, а может это гк растлил Тараса?
Я тут подумал, Тарас на гейдеве ведёт себя адекватнее.
тут модераторов нет... хи-хи-хи... ты сам за собой следишь, а я - всего лишь голос в твоей голове
Ну видимо просто за блядь. Хоть с крестами хоть без ;)
Хм. А я уж подумал, что модераторов нет. Интересно, почему этот герой не ставит подпись? Я должен знать своего героя.
Сам дописал красный текст, забыл о нем, и подумал что это модер? ;)
Раздвоение личности, однако...
http://hontos.ru/wp-content/uploads/2011/11/134.jpg
Или даже так:
слишком медленно деньги копятся
Мама довольна хоть?
Gentoo, gcc, перфоманс, скилл
Есть такой тип reference to procedure (...), являет собой объект, аллоцирующий в куче то, что он захватил и имеющий виртуальный метод (), управляется по счётчику ссылок. Так вот вложенные функции - это он и есть, ну вернее не он, но может приводиться к нему.
1. Вложенные функции
2. Делегаты
3. Собсна замыкания
"Анус" трескает.
извините, не удержался после беглого прочтения дискуссии
Цикл заполняет мемо, читая из листа, и тут же рядом цикл крутит processmessages. Не возникнет ли асинхронность, которая вызовет выход за границы?
begin
timer1.Enabled:=false;
while true do
application.ProcessMessages; {на form.create() цеплять нельзя, форма не покажется.}
end;
ЧТО ЭТО ЗА ХУЙНЯ?!
Ты знаешь, что такое асинхронность?
Твой таймер делает хуйню, вернее он делает то, что программа делает и без него.
Очередь сообщений имеет смысл дергать при ожидании нужного сообщения или определенный условий. Что-то вроде ожидания семафора(мьютекса) без блокировки потока.
Равномерно не обязательно.
> обходить рекурсивную структуру лучше в отдельном потоке
Траеблядь штоле?
типичная краткая история отечественных вокально-инструментальных ансамблей
>>Траеблядь штоле?
У Гислера в ТК она однопоточная )
Потому что Гитлер был плохой и тредоблядство тоже плохо.
Я хочу узнать, безопасно ли будет нажимать вышеуказанные кнопки, когда где-то рядом крутится processmessages. Если без processmessages, то после нажатия кнопки Button1 форма залочена - юзер физически не сможет нажать на Button2. А с application.processmessages вроде сможет, и это вызовет крах. Или не?
>>Или может в потоке диалога?
Если под диалогом подразумевается главная форма, то пожалуй, да.