Форум: "Прочее";
Текущий архив: 2012.04.08;
Скачать: [xml.tar.bz2];
ВнизДля чего нужен Synchronzie Найти похожие ветки
← →
Ega23 © (2011-12-09 11:27) [0]В продолжение ветки http://delphimaster.net/view/2-1323383529/
И. Павел © (09.12.11 11:18) [14]
> [13] Ega23 © (09.12.11 10:57)
1 — ый поток: делает SetLength(mas, 1)
2 — ой поток: делает StrLength(mas, 0);
1 — ый поток: пытается записать значение в mas[0]
Неужели до сих пор не доходит?
Товарищ. Зачем тут нужен Synchronzie???
← →
Сергей М. © (2011-12-09 11:58) [1]Ну он имел ввиду что синхронизация таки нужна.
Возможно кроме Synchronize() как встроенного метода TThread иные способы синхронизации ему неизвестны либо претят по каким-то религиозным соображениям)
← →
Ega23 © (2011-12-09 12:00) [2]
> Ну он имел ввиду что синхронизация таки нужна.
Синхронизация - безусловно нужна. А вот Synchronize() - сильно сомневаюсь.
← →
Андреевич (2011-12-09 12:13) [3]насчет "нужен" это конечно перебор, но если массив в главном потоке и его меняет и главный и дополнительный - Synchronize() просто удобен
← →
Ega23 © (2011-12-09 12:15) [4]
> но если массив в главном потоке
Массив в куче.
← →
Германн © (2011-12-09 12:24) [5]Имхо, потому что у автора это "работает".
А далее Сергей М. © (09.12.11 11:58) [1]
← →
И. Павел © (2011-12-09 12:24) [6]> [0] Ega23 © (09.12.11 11:27)
Никак не успокоитесь? :)
Вот бы мне столько же свободного времени.
> [1] Сергей М. © (09.12.11 11:58)
Известны. Но зачастую их реализация превращает код сложной логики в винигрет (это один частный случай).
Но эти методы имеет смысл использовать, если перенос расчетов в главный поток не желателен. Это другой частный случай.
← →
Ega23 © (2011-12-09 12:30) [7]
> Но зачастую их реализация превращает код сложной логики
> в винигрет (это один частный случай).
Ужас.
← →
Сергей М. © (2011-12-09 12:42) [8]
> И. Павел © (09.12.11 12:24) [6]
> Известны
Ну тады ой)
А то я уж разволновался)
← →
Palladin © (2011-12-09 17:08) [9]Вот такие люди советов надают, а потом смотришь примеры исходников кандидата, а там сплошные синхронизы, и по поводу и без повода...
Вот у меня, почему-то, ни критические секции, ни семафоры никакого винигрета в коде не создают, что же я не так делаю...
← →
Сергей М. © (2011-12-09 17:16) [10]
> у меня, почему-то, ни критические секции, ни семафоры никакого
> винигрета в коде не создают
Пресно ж как-то)..
Может файберы в блюдо добавить ?)
http://code.google.com/p/delphisorcery/source/browse/trunk/Source/Core/DSharp.Core.Fibers.pas?spec=svn211&r=211
Соляночка что надо получится)
← →
И. Павел © (2011-12-09 23:33) [11]
> Вот такие люди советов надают, а потом смотришь примеры
> исходников кандидата
Если вы так беспокоитесь об осведомленности программистов о всех возможных методах синхронизации, то для меня остается загадкой ваш пост [11] в исходной ветке.
← →
И. Павел © (2011-12-09 23:46) [12]Кстати, вспомнил одно из достоинств synchronize: возможность общей обработки исключений всех потоков, например, в центральном обработчике OnException. Мелочь, но на практике бывает очень полезной, если нужно создать устойчивое приложение без дополнительных ухищрений, усложняющих логику.
← →
Ega23 © (2011-12-09 23:55) [13]
> Если вы так беспокоитесь об осведомленности программистов
> о всех возможных методах синхронизации, то для меня остается
> загадкой ваш пост [11] в исходной ветке.
Пост [6]. Для того, чтобы писать в обну структуру, нужно использовать synchronize.
Для того, чтобы безопасно писать в одну структуру, надо либо мьютекс, либо крит.секцию использовать (второе предпочтительнее). Использовать же synchronize для этих целей попхивает вырыванием гланд через опу.
Собственно, что Тимур, что я, крайне удивились посту [6]. Да и всем последующим.
← →
Ega23 © (2011-12-09 23:56) [14]
> Мелочь, но на практике бывает очень полезной, если нужно
> создать устойчивое приложение без дополнительных ухищрений,
> усложняющих логику.
Переведи.
← →
Dennis I. Komarov © (2011-12-10 00:07) [15]потоки, подобно указателям...
их надо просто понимать (продставлять как оно там происходит), и ничего там сверхестественного нет...
← →
И. Павел © (2011-12-10 00:13) [16]
> Ega23 © (09.12.11 23:55) [13]
[12] и к вам относится. Только пост не [11], а [8] и далее.
Спорить тут нет смысла, и я, пожалуй, не буду, т.к. в выходные найду занятие поинтереснее. Про методы синхронизации я знаю, ничего крамольного в synchronize не вижу (пока это не тормозит систему), а вот автор исходного вопроса скорее всего уже это не читает.
← →
Ega23 © (2011-12-10 00:20) [17]
> Про методы синхронизации я знаю
Сомнительно.
> ничего крамольного в synchronize не вижу
А никто не говорит, что это дело крамольное.
Помнится, был тут кадр, в TMemo логи писал. Т.е. создавал TMemo в рантайме, передавал его в длительную процедуру обработки, писал в него, в конце - Memo.Lines.SaveToFile и убивал. Про StringList как-то не догадывался.
Твоё использование Sunchronize для безопасного доступа к данным - из той же серии.
← →
Игорь Шевченко © (2011-12-10 00:37) [18]И. Павел © (09.12.11 23:46) [12]
> Кстати, вспомнил одно из достоинств synchronize: возможность
> общей обработки исключений всех потоков, например, в центральном
> обработчике OnException.
Дай дураку член стеклянный - и член разобьет и руки порежет
← →
Германн © (2011-12-10 00:38) [19]
> И. Павел © (09.12.11 23:46) [12]
>
> Кстати, вспомнил одно из достоинств synchronize: возможность
> общей обработки исключений всех потоков, например, в центральном
> обработчике OnException. Мелочь, но на практике бывает очень
> полезной, если нужно создать устойчивое приложение без дополнительных
> ухищрений, усложняющих логику.
Хм. Исключения в доппотоках это вообще-то очень сложная проблема. Таки вы предлагаете всё в доппотоках выполнять внутри процедуры Synchronize именно из-за проблем с исключениями?
← →
antonn © (2011-12-10 00:53) [20]
> Таки вы предлагаете всё в доппотоках выполнять внутри процедуры
> Synchronize именно из-за проблем с исключениями?
наверное мессаги исключения выдавать в методе через синхронайз :)
← →
Ega23 © (2011-12-10 08:50) [21]
> наверное мессаги исключения выдавать в методе через синхронайз
> :)
Синхронайз не поддерживает методы с параметрами. Чтобы передать туда строку надо ещё изгольнутся, и я не уверен, что код от этого прозрачнее будет.
← →
Юрий_ (2011-12-10 11:53) [22]Единственный довод за синхронайз - если нужна кроссплатформенность, и мы не можем использовать объекты операционки.
← →
Вариант (2011-12-10 12:32) [23]
> Юрий_ (10.12.11 11:53) [22]
Приведу еще пару или тройку доводов за :
1) Метод Synchronize уже написан грамотными разработчиками, его не надо писать заново, он прост в использовании.
2) Если знать как он работает, когда и для каких случаев им пользоваться,то он действительно работает.
3) Метод Synchronize не обидится, если вы вместо него используете другие методы синхронизации
← →
Kerk © (2011-12-10 12:47) [24]
> Игорь Шевченко © (10.12.11 00:37) [18]
> Дай дураку член стеклянный - и член разобьет и руки порежет
Удалят, наверно, но напишу :)
Мне нравится ещё одна вариация данной поговорки: "Дураки е_утся насмерть" :)
← →
sniknik © (2011-12-10 13:08) [25]> Приведу еще пару или тройку доводов за :
1) "бегин енд" написан "грамотными разработчиками", его не надо писать заново, он супер прост в использовании. + еще не зафиксировано ни одного глюка данной конструкции.
2) если знать как работает что угодно, и для каких случаем им пользоваться, то что угодно действительно работает. + не в пример универсальнее синхронайза.
3) что угодно не обидится, если вместо него использовать другое что угодно. ибо не одушевлено. бойтесь искусственного интеллекта... грядет. и вот тогда вы ответите за свой код.
p.s. аргументы "ни о чем".
← →
DVM © (2011-12-10 13:09) [26]
> Юрий_ (10.12.11 11:53) [22]
>
> Единственный довод за синхронайз - если нужна кроссплатформенность,
> и мы не можем использовать объекты операционки.
Покажите мне операционку без критических секций или объектов синхронизации, которые бы позволили бы так или иначе заменить критическую секцию пусть и даже не столь эффективно? Даже в самой захудалой найдутся мьютексы и семафоры.
← →
DVM © (2011-12-10 13:12) [27]
> Вариант (10.12.11 12:32) [23]
>
>
> > Юрий_ (10.12.11 11:53) [22]
>
> Приведу еще пару или тройку доводов за :
>
> 1) Метод Synchronize уже написан грамотными разработчиками,
> его не надо писать заново, он прост в использовании.
Полубогами вероятно. Т.е они не ошибаются? То-то оно переписывалось неоднократно. Еще помню TMultiReadExclusiveWriteSynchronizer (уфф..ну и название) с ошибками, приводящими к деадлокам (исправили уже).
← →
Вариант (2011-12-10 13:39) [28]
> sniknik © (10.12.11 13:08) [25]
> p.s. аргументы "ни о чем".
Кстати согласен, ибо мой пост это сарказм на пост [22],
ибо в этой ветке почти все посты ни о чем, начиная с самой ветки.
> DVM © (10.12.11 13:12) [27]
Я писал о полубогах? Я писал о грамотных разработчиках, или ты отказывешь в этом разработчика дельфи?
А ошибок да, было много всяких. Но исправляют же. Не ошибается тот кто не пишет.... или ты полубог? Уверен что нет.
← →
Андреевич (2011-12-10 13:54) [29]
> Ega23 © (10.12.11 08:50) [21]
>
> > наверное мессаги исключения выдавать в методе через синхронайз
>
> > :)
>
>
> Синхронайз не поддерживает методы с параметрами. Чтобы передать
> туда строку надо ещё изгольнутся, и я не уверен, что код
> от этого прозрачнее будет.
не поддерживает, можно изгольнуться и завести переменную под это дело
← →
oxffff © (2011-12-10 15:02) [30]Со строками все просто
procedure DoStuff(stuff:string);
begin
TThread.Synchronize(nil,
procedure
begin
showmessage(stuff);
end);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DoStuff("На сретенском все спокойно");
end;
← →
Юрий_ (2011-12-10 15:48) [31]
> DVM © (10.12.11 13:09) [26]
>
> Даже в самой захудалой найдутся мьютексы и семафоры.
Найтись то они, безусловно, найдутся, но программный интерфейс врядли везде одинаков.
>DVM © (10.12.11 13:12) [27]
+1
> Вариант (10.12.11 13:39) [28]
> Кстати согласен, ибо мой пост это сарказм на пост [22],
Не вижу поводов для сарказма. Поясните.
← →
И. Павел © (2011-12-10 18:06) [32]
> Kerk © (10.12.11 12:47) [24]
А если не насмерть, то по крайней мере без перерывов, даже ночью и в выходные... Для интереса буду время от времени следить за этим процессом, т.к. похоже, это надолго.
← →
Вариант (2011-12-10 18:06) [33]
> Юрий_ (10.12.11 15:48) [31]
Не аргументированное заявление. Например имею GUI приложение, есть необходимость обращаться из дополнительного потока к VCL. Является ли это аргументом к использованию вышеупомянутого метода, если я использую таки класс TThread, или как тут пишут "религия не позволяет" и надо обязательно демонстрировать знание Windows API?
← →
Ega23 © (2011-12-10 18:25) [34]
> Для интереса буду время от времени следить за этим процессом,
> т.к. похоже, это надолго.
Ты бы лучше следил за тем, что в "Начинающим" пишешь. Не первый раз уже, кстати.
← →
Kerk © (2011-12-10 18:42) [35]Вообще, не вижу ни одной причины почему какая-нибудь критическая секция или мьютекс сложнее синхронайза. Поведай.
← →
Kerk © (2011-12-10 18:46) [36]
> Вариант (10.12.11 18:06) [33]
Synchronize придумали с конкретной целью. Как раз для того, о чем ты пишешь. А вот использовать его, когда тебе нужно между собой синхронизировать два дополнительных потока, это уже странно.
← →
Ega23 © (2011-12-10 18:54) [37]
> Synchronize придумали с конкретной целью. Как раз для того,
> о чем ты пишешь.
Ну да. Причём именно для "простоты", т.к. никто не мешает SendMessage сделать, что равносильно предыдущей реализации синхронайза.
← →
Вариант (2011-12-10 18:54) [38]
> Kerk © (10.12.11 18:42) [35]
Писать меньше, уже написано все, а я стал ленивым.
> Kerk © (10.12.11 18:46) [36]
То есть причина использовать метод есть.
> А вот использовать его, когда тебе нужно между собой синхронизировать
> два дополнительных потока, это уже странно.
А вот для этого случая я специально написал пункт 2 в [23]. Знать когда неиспользоапть тоже надо.
← →
Вариант (2011-12-10 19:00) [39]
> Ega23 © (10.12.11 18:54) [37]
Мне нравится оправданная простота:-)
Кстати я считаю правильным, что предыдущую реализацию переписали. Ибо простота реализации в данном случае ... дала сбой, скажем так
← →
И. Павел © (2011-12-10 19:17) [40]
> Ega23 © (10.12.11 18:25) [34]
Критикуя других, за собой вы, конечно, не следите (надеюсь, это только на форуме, а в профессиональной деятельности все с точностью наоборот).
В исходной ветке вы дали массу "полезных" ответов. После того, как ее закрыли (кто стал инициатором ее закрытия?) - вы перенесли спам сюда. Возможно, вам стоит добавить к нику приставку "T"?
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2012.04.08;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.004 c