Войти
ПрограммированиеФорумОбщее

Красивый способ создания потоков. (комментарии)

Страницы: 1 2 3 Следующая »
#0
15:04, 22 апр. 2013

Красивый способ создания потоков. (комментарии)

Это сообщение сгенерировано автоматически.

#1
15:04, 22 апр. 2013

SHOW

#2
15:26, 22 апр. 2013

Chaos_Optima

> с приходом С++11
С приходом С++11 к нам пришел std::thread. А к вам он заходил?

#3
15:35, 22 апр. 2013

Ghost2
> С приходом С++11 к нам пришел std::thread. А к вам он заходил?
конечно и что? он всё равно некрасивый.

#4
16:46, 22 апр. 2013

>конечно и что? он всё равно некрасивый.
Зато кроссплатформенный. Мог бы на нём основу сделать.

>Для этого нам понадобятся несколько классов и макросов.
>макросов
О нет. Как можно считать слова большими буквами красивыми? За это я и не люблю макросы, что либо надо придумывать уродские имена, либо будут конфликты имён.

>for(int i = 0; i<10; i++)GO
>{Test();};
Не накладно ли будет создавать 10 потоков? Для распараллеливания циклов наверно лучше всегда держать количество потоков, совпадающее с количеством логических процессоров, и дёргать их по очереди, разве нет?

В общем, небольшой уровень костылявости костыльность данного решения есть, но по сравнению с предыдущим, по моим меркам допустимо. Только лучше не замусоривать пространства имён и сделать g_ThreadCreator статическим. Также delete _Func - это UB. Нельзя удалять void*.

#5
16:48, 22 апр. 2013

concurrency::create_task([this] { do_work(); });

#6
16:56, 22 апр. 2013

gammaker
> Зато кроссплатформенный. Мог бы на нём основу сделать.
ну с основой я не заворачивался, написал по минимуму, чтобы легче понималось.
gammaker
> О нет. Как можно считать слова большими буквами красивыми? За это я и не люблю
> макросы, что либо надо придумывать уродские имена, либо будут конфликты имён.
эм. ну большие слова я пишу потому что у меня гадлайн такой, и потому что мне нравится писать макросы большими буквами, никто не запрещает переписать на маленькие.
gammaker
> Не накладно ли будет создавать 10 потоков? Для распараллеливания циклов наверно
> лучше всегда держать количество потоков, совпадающее с количеством логических
> процессоров, и дёргать их по очереди, разве нет?
это для примера.
gammaker
> Только лучше не замусоривать пространства имён и сделать g_ThreadCreator
> статическим.
да наверно.
gammaker
> Также delete _Func - это UB. Нельзя удалять void*.
упс, да сейчас поправлю спасибо.
zlos
> concurrency::create_task([this] { do_work(); });
vs
GO_EX(this){ do_work(); };
или
go_ex(this){ do_work(); };

#7
16:58, 22 апр. 2013

Chaos_Optima

Sleep(4000);

Это такой способ ожидания, когда поток(и) завершат работу?
А как же detach/wait?
Красивый способ создания потоков

Наверное я отстал от жизни, но мне этот код кажется не только некрасивым, но и абсолютно непонятным...
#8
17:01, 22 апр. 2013

gkv311
> Это такой способ ожидания, когда поток(и) завершат работу?
> А как же detach/wait?
это для примера было а не для ожидания завершения. просто у меня там потоки в цикле создаются, поэтому для нормального ожидания пришлось бы немного больше писать )).
gkv311
> Наверное я отстал от жизни, но мне этот код не только не кажется красивым, но
> ещё и абсолютно непонятным...
то что внутри фигурных скобок после GO запускается в другом потоке.

#9
17:13, 22 апр. 2013

Chaos_Optima
Только это не создаёт потоки, оно раскидывает задачи по уже существующим. И позволяет делать крутые вещи вроде последовательности задач и разных условий. Типа "выполнить когда все задачи завершится" и "выполнить когда одна из задач завершится".

#10
17:19, 22 апр. 2013

zlos
> Только это не создаёт потоки, оно раскидывает задачи по уже существующим. И
> позволяет делать крутые вещи вроде последовательности задач и разных условий.
> Типа "выполнить когда все задачи завершится" и "выполнить когда одна из задач
> завершится".
а понятно, я думал что это такой способ создания потоков.
тем не менее если немного доработать мой код можно сделать так
TASK_EX(this){ do_work(); };

#11
22:08, 22 апр. 2013

Мютексы фу, фу.
Если надо межпроцессное уж лучше через расшаренные критические секции.
А так критические секции, евенты.

#12
22:17, 22 апр. 2013

asvp

> расшаренные критические секции
А как их можно расшарить?

#13
23:12, 22 апр. 2013

Код неряшливый хотя и работает.

#14
23:59, 22 апр. 2013

asvp
> Мютексы фу, фу.
> Если надо межпроцессное уж лучше через расшаренные критические секции.
> А так критические секции, евенты.
эм. просто взял для примера, туда можно что угодно прикрутить, хоть крит секции хоть семафоры
Мух
> Код неряшливый хотя и работает.
хм... а в чём заключается неряшливость?

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.