|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.11.2014, 12:38 | #1 |
Пользователь
Регистрация: 01.11.2014
Сообщений: 10
|
Как передать данные в поток..
Здраствуйте Уважаемые коллеги!
Начал только недавно работать с C# и мало что о нем знаю. Как передать какие то данные в поток? Вот как видно из рисунка, при вызове метода prepareThreads(), он вызывает метод F_MYIP(), т.е. F_MYIP() будет работать параллельно в три потока. И мне нужно этому методу ещё передать какие то дополнительные данные. Я планирую всем трем потокам передавать разные строки. И как вот это все оформить понятия не имею. Подскажите как правильно прописать код. Спасибо. |
01.11.2014, 12:54 | #2 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
либо запускайте в поток параметрическую функцию, либо создайте волатильные переменные в том же классе.
И все дела.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
01.11.2014, 13:42 | #3 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Чтобы использовать volatile надо знать что это и почему, а то внезапно столкнется автор с другими проблемами. volatile это не магия, зашишающая от всего на свете, часто нужны другие механизмы типа lock.
http://stackoverflow.com/a/19384758/964478 Цитата:
Нельзя просто так взять и написать корректное многопоточное приложение. И объяснить все на форуме тоже сложно, это большая и не простая тема. И лучше использовать более новые средства (абстракции) для создания и управления потоками, чем древний Thread. Если на Delphi раньше писали (это ж таки форум дельфистов), то BackgroundWorker похож на TThread в Delphi. А еще лучше Task (TPL).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 01.11.2014 в 13:55. |
|
01.11.2014, 14:07 | #4 | |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Цитата:
И хорошо бы сравнительную табличку трэда и новых методов.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
|
01.11.2014, 14:14 | #5 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Какую еще табличку? Просто Task удобнее в большинстве случаев, чем более "низкоуровневый" Thread (и по эффективности тоже лучше при создании большого числа задач из-за использования ThreadPool и т.п., чем тупо самому создавать по потоку на каждую).
Что подробнее? Максимального размера сообщения форума не хватит для подробного описания TPL + концепций многопоточного программирования. http://www.codeproject.com/Articles/...l-Library-of-n http://msdn.microsoft.com/en-us/libr...vs.100%29.aspx Цитата:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 01.11.2014 в 14:37. |
|
01.11.2014, 14:37 | #6 | |
Пользователь
Регистрация: 01.11.2014
Сообщений: 10
|
Цитата:
Но я уже нашол решение. Просто при каждой интеграции цыкла... при создании каждого потока я увеличиваю значение спецыальной глобальной переменной на плюс 1, а потом уже смотрю чему она равна и таким образом буду знать какое элемент массива (свою строку), мне подставить в каждый поток. Мне кажется это гениально, как вы считаете? Код:
|
|
01.11.2014, 14:55 | #7 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Лучше уж так:
Код:
Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
01.11.2014, 15:00 | #8 |
Пользователь
Регистрация: 01.11.2014
Сообщений: 10
|
Alex11223,
Вот! Вот примерно чето такое я и хотел от ваас. Ну спасибо. |
01.11.2014, 15:01 | #9 | |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Цитата:
Пул потоков не панацея. Для каждой задачи нужно свое решение. Конечно если у вас приложение требует каждую секунду создавать десятки потоков то пул будет несомненно полезен, но если вам нужен 1 - 2 потока с серьезной нагрузкой то придется взять молоток и напильник и вернутся к "древним" Thread.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
|
01.11.2014, 15:08 | #10 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Task/TPL — просто более высокоуровневая абстракция. Разница в производительности может и не нужна во многих случаях, но основной смысл не в ней, а в удобстве механизмов для работы с ними, не придется их самому пилить с 0 с Thread. Хотя бы самое простое: обработка исключений, возвращение результата, остановка, синхронизация (CancellationToken, TaskSheduler, ContinueWith, ...), а в C#5 еще и async/await.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как передать данные из WebBrowser'a ? | Santa86 | C# (си шарп) | 0 | 15.10.2014 17:42 |
Как передать динамический массив в поток? | bilibian | Общие вопросы Delphi | 8 | 28.02.2014 15:22 |
Как передать структуру в поток при _beginthread | Ksardas13 | Общие вопросы C/C++ | 2 | 10.03.2012 05:00 |
Как передать параметр в поток? | Pack | Общие вопросы Delphi | 3 | 22.02.2012 12:09 |
Как передать данные из БД в ComBox | uni | Microsoft Office Excel | 8 | 22.07.2011 08:20 |