![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TThread
dmk © (2016-07-05 22:15:00)Всем привет, подскажите пожалуйста, возможно ли заставить выполнить потоки в строгой последовательности и в то же время, чтобы простоев (ожиданий) не было.
В данный момент неизвестно, какой поток придет первый, а какой последний.
Delphi XE6.
vgf (2016-07-06 14:46:00) [41]Удалено модератором
dmk (2016-07-06 14:21:00) [42]Семафор позволяет выполнять в нужной последовательности / очередности (например, как запущены потоки).
dmk (2016-07-06 14:12:00) [43]>не могут два потока работающих друг за другом
>выполнить работу быстрее чем один поток.
Хе-хе. Я сделал. И как оказалось может.
>да и последовательно проблемно.
Не проблемно. Сделал логический семафор.
Итого:
6000 линий в одном потоке — 16.3 секунды за оборот в 360°
6000 линий в 12-и потоках — 4.25 секунды за оборот в 360°
Выполняется одно и то же действие. Последовательность соблюдена!!!
А говорите нельзя :)
Вопрос закрыт!
Kilkennycat (2016-07-06 09:32:00) [44]
> рисуется десятки тысяч линий по одним и тем же координатам (объекты)
> и получается легкое мерцание и неправильная картинка.
Отсюда вывод, что логика всё-таки извращена, раз конечный результат видит человек на мониторе. ибо: монитор не может отобразить две линии одновременно, в силу однослойности экрана; человек не может воспринять десятки тысяч линий одновременно, да и последовательно проблемно.
sdf (2016-07-06 08:43:00) [45]решение не то же самое. это тебе только кажется оттого что саи не понимаешь что напрограммарывал.
не могут два потока работающих друг за другом выполнить работу быстрее чем один поток.
Rouse_ (2016-07-06 07:25:00) [46]Удалено модератором
dmk (2016-07-06 02:47:00) [47]>А рисование в буфере без доппотоков не дало бы тоже самое решение?
Решение тоже самое, но в 6 раз медленнее.
Германн (2016-07-06 01:22:00) [48]
> dmk © (05.07.16 23:21) [9]
>
> >а еще может прийти понимание того,
> >что потоки это средство распараллелить вычисления,
> >но не средство структурировать код
>
> А я вот 3 дня долбал TThread и научился рисовать в потоках
> на экране.
> Практически все получается вывести, кроме линий. И главное
> скорость в разы больше.
> А иначе зачем TThread вообще нужен.
> dmk © (05.07.16 23:30) [12]
>
> iop © (05.07.16 23:18) [7]
> Я вашу логику понимаю. Так работают потоки. Но я немножечко
> обошел логику эту с помощью рисования в буфере. По частям.
> Вот и решение.
А рисование в буфере без доппотоков не дало бы тоже самое решение?
<OFFTOP>
P.S. Я вот не понимаю чем использование доппотоков может увеличить скорость выполнения программ в разы, кроме распределения этих потоков на разные ядра процессора. Конечно Винда таки их распределяет, но с учётом в первую очередь своих интересов.
</OFFTOP>
dmk (2016-07-05 23:37:00) [49]Меня тоже поражает логика многих программистов. Конечно она безупречна с точки зрения самой логики, но есть и не логичные варианты. Они тоже ведь подходят. Чего ругаться то сразу :)
dmk (2016-07-05 23:30:00) [50]iop © (05.07.16 23:18) [7]
Я вашу логику понимаю. Так работают потоки. Но я немножечко обошел логику эту с помощью рисования в буфере. По частям. Вот и решение.
iop (2016-07-05 23:29:00) [51]еще раз для астрофизиков на досуге.
если какие потоки должны рисовать последовательно, то это значит что поток должен быть один.
если же последовательно не требуется, то тогда генери свои потоки, отнимай у системы ресурсы наздоровье.
и не парься о том, когда какой стартовать, так как последовательности не требуется.
иначе смотри в начало ветки
dmk (2016-07-05 23:22:00) [52]Удалено модератором
dmk (2016-07-05 23:21:00) [53]>а еще может прийти понимание того,
>что потоки это средство распараллелить вычисления,
>но не средство структурировать код
А я вот 3 дня долбал TThread и научился рисовать в потоках на экране.
Практически все получается вывести, кроме линий. И главное скорость в разы больше.
А иначе зачем TThread вообще нужен.
iop (2016-07-05 23:19:00) [54]две гайки - два завода!
логично же
iop (2016-07-05 23:18:00) [55]Удалено модератором
dmk (2016-07-05 23:13:00) [56]Усе, понял. Надо сделать на каждый поток отдельный буфер. Т.е. порезать экран вертикально или горизонтально. Только проблемы с отсечением. Из-за параллельности отсечени не всегда срабатывает. Или не во-время срабатывает. Будем думать.
dmk (2016-07-05 23:10:00) [57]>можно сделать любую бессмыслицу
Хочу!!!!
На самом деле в потоках рисуется десятки тысяч линий по одним и тем же координатам (объекты). В одном потоке это очень медленная операция. Нужно чтобы линии рисовались последовательно, но множеством потоков. Иначе получается так, что некоторые линии рисуются после тех которые должны быть поверх. Меняется очередность линий и получается легкое мерцание и неправильная картинка.
У меня есть например 12 потоков. 1-й рисует скажем первую сотню или тысячу линий. Второй рисует вторую. Но в массиве это лежит все в строгой последовательности и в нужном порядке наложения. Вот и хотелось бы сохранить этот порядок. Сейчас все рисуется как получится именно из-за непоследовательного выполнения потоков. Понимаю, что задача не очень продумана, но все же ... Скорость отрисовки в 6 раз выше. Мне это нравится.
Есть мысли по этому поводу?
DVM (2016-07-05 22:42:00) [58]
> возможно ли заставить выполнить потоки в строгой последовательности
> и в то же время, чтобы простоев (ожиданий) не было.
можно, надо лишь отказаться от доп потоков и делать все в одном потоке последовательно.
Kilkennycat (2016-07-05 22:24:00) [59]Насколько строгой? Что бы за один такт совершилось две операции (по одной в каждом потоке) ?
Теоретически, на многоядерном процессоре возможно.
А практически, почему не считать завершение последнего завершением и первого?
> неизвестно, какой поток придет первый, а какой последний.
Это как? Потоки вообще-то могут общаться и с собой, и с третьим.
iop (2016-07-05 22:24:00) [60]а еще может прийти понимание того, что потоки это средство распараллелить вычисления, но не средство структурировать код
для структурирования кода придуманы модули и процедуры/функции