Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Передача данных в поток.

335
22 апреля 2006 года
enola
379 / / 25.01.2005
Снова мои вопросы про потоки :D.
Есть поток в который нужно передать данные для обработки. Как сие можно реализовать?
Можно наверное создать скажем (для примера) переменную public в главном потоке, а из дополнительного обращаться к ней, но мне кажется не очень красиво.
Как еще можно?
246
23 апреля 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by enola
Снова мои вопросы про потоки :D.
Есть поток в который нужно передать данные для обработки. Как сие можно реализовать?
Можно наверное создать скажем (для примера) переменную public в главном потоке, а из дополнительного обращаться к ней, но мне кажется не очень красиво.
Как еще можно?


Нормально. Только нужна синхронизация.

3
23 апреля 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by enola
Снова мои вопросы про потоки :D.
Есть поток в который нужно передать данные для обработки. Как сие можно реализовать?
Можно наверное создать скажем (для примера) переменную public в главном потоке, а из дополнительного обращаться к ней, но мне кажется не очень красиво.
Как еще можно?


А что мешает передавать через lParam ?

335
23 апреля 2006 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by Green
А что мешает передавать через lParam ?



это как?

246
23 апреля 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by enola
это как?


Это если создаешь поток API-шной ф-й:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,//<<<<<<< сюда
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
Да не парься, передай в конструктор TThread:)

3
23 апреля 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by enola
это как?


Функции создающие потоки имеют параметр, которой передается в созданный ими поток как есть.

Цитата:

uintptr_t _beginthread(
void( *start_address )( void * ),
unsigned stack_size,
void *arglist
);


Цитата:

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);


Т.о. ты можешь передать любую информацию в созданный поток.
В принципе, любая обертка над CreateThread должна иметь такой параметр.

335
23 апреля 2006 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by GIZMO
Это если создаешь поток API-шной ф-й:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,//<<<<<<< сюда
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
Да не парься, передай в конструктор TThread:)



Нет поток создаю через Thread Object, т.е. не API.
Как передать через конструктор?

8.7K
23 апреля 2006 года
Rubicon
55 / / 28.10.2005
Цитата:
Originally posted by enola
Нет поток создаю через Thread Object, т.е. не API.
Как передать через конструктор?


Так же, как передаешь параметры обычной функции.
Можно еще создать к-нибудь глобальный ресурс (переменныую, список, смотря что хочешь передать), синхронизировать к нему доступ потоков.
Про синхронизацию почитай о мьютексах, симофорах и критичных секциях.
Рихтер

335
24 апреля 2006 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by Rubicon
Так же, как передаешь параметры обычной функции.
Можно еще создать к-нибудь глобальный ресурс (переменныую, список, смотря что хочешь передать), синхронизировать к нему доступ потоков.



Т.е. просто создать переменную (для примера) в классе потока и к ней обращаться?!

1
24 апреля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by enola
Т.е. просто создать переменную (для примера) в классе потока и к ней обращаться?!


Переменную сделать закрытой - передавай параметры в конструктор.

335
24 апреля 2006 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by kot_
Переменную сделать закрытой - передавай параметры в конструктор.



"что-то не догоняю я поезда".
можешь показать как?

1
24 апреля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by enola
"что-то не догоняю я поезда".
можешь показать как?


В теме "Копирования файла в потоке" я аттачил файл - в нем в поток передаются параметры.

335
24 апреля 2006 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by kot_
В теме "Копирования файла в потоке" я аттачил файл - в нем в поток передаются параметры.



Я разобрался как ты это реализовал. В разделе public класса потока объявляешь функции, которые устанавливают значения членов класса.
В связи с этим два вопроса:
1. Почему просто не объявить членом класса в разделе public те данные к которым необходим доступ из вне?
2. Почему члены класса ты объявляешь в protected, а не скажем private?

1
25 апреля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by enola
Я разобрался как ты это реализовал. В разделе public класса потока объявляешь функции, которые устанавливают значения членов класса.
В связи с этим два вопроса:
1. Почему просто не объявить членом класса в разделе public те данные к которым необходим доступ из вне?


Да никто не запрещает - но зачем?
Мне необходимо обеспечить механизм который будет относительно независим от остальной части программы - в функции я могу проверять соответствие параметров каким либо критериям, устанавливать путь к домашнему каталогу пользователя(что кстати и делается) - если вдруг критерии изменятся - менять мне прийдется в одном месте - в функции. Ну и т.д. Принцип один - это не имеет отношения к остальной части программы - это должно быть скрыто.

Цитата:
Originally posted by enola

2. Почему члены класса ты объявляешь в protected, а не скажем private?


А х.з? Может я планировал наследовать от этого класса? Что кстати и имелось ввиду - предполагался базовый класс и наследование отнего. Потом идея с наследованием оказалась мертворожденной - а переменные остались.

335
25 апреля 2006 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by kot_
Да никто не запрещает - но зачем?
Мне необходимо обеспечить механизм который будет относительно независим от остальной части программы - в функции я могу проверять соответствие параметров каким либо критериям, устанавливать путь к домашнему каталогу пользователя(что кстати и делается) - если вдруг критерии изменятся - менять мне прийдется в одном месте - в функции. Ну и т.д. Принцип один - это не имеет отношения к остальной части программы - это должно быть скрыто.

А х.з? Может я планировал наследовать от этого класса? Что кстати и имелось ввиду - предполагался базовый класс и наследование отнего. Потом идея с наследованием оказалась мертворожденной - а переменные остались.



все понятно теперь, оправдано такое использование.
спасибо.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог