|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.03.2013, 11:05 | #1 |
Пользователь
Регистрация: 12.03.2013
Сообщений: 28
|
Не могу разобраться с потоками
Недавно начал ковыряться с потоками и чисто в ознакомительных целях
наваял нехитрый брут, пока не защищенный, черновик так что не плевайтесь. Проблем куча и я незнаю как их исправить. В одном потоке все работает отлично, но с увеличением потоков происходят чудеса: иногда пропускаются строки при загрузке из словаря, и/или несколько потоков грузят одну и туже строку из словаря. Я так догадываюсь что это изза кривого подхода к передачи данных в поток, но я других спобов не нашел. В интернетах много примеров как вывести результат из потока, но мне надо загрузить в поток. Как это правильно сделать? Код:
Давлю тараканов
|
12.03.2013, 11:26 | #2 | ||||||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Цитата:
первый поток поставил свое значение второй поток СРАЗУ ПОСЛЕ (до того как первый успел воспользоваться) поставил свое значение Теперь первый хочет взять свое значение (а там уже значение для второго) в итоге первое значение пропущено, а второе взято дважды Цитата:
Код:
Цитата:
Цитата:
Цитата:
Если да то все хорошо, иначе возвращаемся к началу (не использовать глобальных переменных). procedure TBthread.GetPasw; begin // сначала лучше проверить if crnt<ldict then begin passwrd:=Dict.Strings[crnt]; inc(crnt); end else stop:=true;// можно конечно остановить ВСЕ потоки terminate; // или же остановить только текущий // Остальные в этом случае могут остановиться в свою очередь при СВОЕМ следующем обращении к словарю. end; И еще одно задача Terminate это НЕ ОСТАНОВКА потока, а информирование (просьба/пожелание) об оной. всего лишь (terminated:=true Чтобы поток отреагировал он должен проверять внутри рабочего цикла свое свойство while not terminated | until terminated | if terminated then Exit; посему Цитата:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 12.03.2013 в 11:54. |
||||||
12.03.2013, 20:05 | #3 |
Пользователь
Регистрация: 12.03.2013
Сообщений: 28
|
Спасибо! Щас попробую..
Давлю тараканов
|
26.03.2013, 03:25 | #4 |
Пользователь
Регистрация: 12.03.2013
Сообщений: 28
|
Еще раз спасибо, все работает отлично.
Давлю тараканов
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Пример работы с потоками, не могу разобраться! | Kaaatso | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 27.05.2012 07:36 |
не могу разобраться | navolo4ka | Qt и кроссплатформенное программирование С/С++ | 3 | 03.02.2012 14:01 |
не могу разобраться | feesta | Помощь студентам | 3 | 17.09.2011 23:46 |
НЕ МОГУ РАЗОБРАТЬСЯ С ПОТОКАМИ | Psix0 | Общие вопросы C/C++ | 5 | 22.01.2011 18:21 |