- Регистрация
- 01.05.2016
- Сообщения
- 99
- Благодарностей
- 5
- Баллы
- 8
Добрый день, Коллеги
Я думаю, у многих начинающих и не очень начинающих пользователей Зеннопостера возникает такой вопрос. Это дошло и до меня, пошерстил форум, и вроде почти нашёл решение, но оно всё равно кривое, теперь к делу.
Занимаюсь рассылками, нужна реализация следующей логики: потоки делают 1000 сообщений, далее нужно чтобы один из всех поток делал отправку на проверочную почту (самому себе), проверял доставку в "инбокс" и если всё успешно, то работа продолжалась дальше, т.е. потоки снова начали отправлять следующую 1000 сообщений.
Изначально логично было подступиться к глобальным переменным, но прочитав форум понял, что с ними багов предостаточно, к тому же потоки могут случайно одновременно лезть к переменной, ещё больше напрягся из-за предстоящей запары. Далее пришла костыльная идея, опять же с форума, про общий список на проект (Вложение 1), сделал список, привязанный к файлу, с цифрами от 1 до 1000, логика следующая: каждый проект после отправки сообщения берёт число из списка с удалением, начиная с 1, как только список заканчивается, он сразу же пополняется вновь числами от 1 до 1000 (чтобы другие потоки не залезли в красную ветку), а затем активируется проверочная логика, посредством установки "1" переключателю логики (простая отправка/отправка себе-проверочная)
И вроде бы костыль работает, то есть один поток обнаруживает, что список-счётчик пуст, пополняет список, активирует проверочную логику и делает проверочную отправку, проверяет, но есть проблема: остальные потоки продолжаюбт работать, ведь общий список уже пополнился сразу после того, как он был замечен пустым, а если письмо не дошло, то по логике должна быть "стоп-машина", но на деле всё иначе. Если убрать это пополнение списка в конец, т.е. поток проверил доставку и только поток дал старт другим потокам работать, то их нужно как-то занять, чтобы они не упали.
Следственно, нужно придумать что-то, чтобы в случае если проверка показало, что письмо не дошло, то:
1) Все потоки останавливали свою работу и в Зенно нельзя было добавить новые попытки выполнения.
2) Либо сделать так, чтобы 1 поток делал проверку, все остальные простаивали, как только проверка прошла, работа потоков продолжалась.
Но мне что-то в голову уже ничего не лезет, может кто-то всё-таки "дободался" с этой темой до нормального решения? Глобальные переменные или всё-таки костыль?
Я думаю, у многих начинающих и не очень начинающих пользователей Зеннопостера возникает такой вопрос. Это дошло и до меня, пошерстил форум, и вроде почти нашёл решение, но оно всё равно кривое, теперь к делу.
Занимаюсь рассылками, нужна реализация следующей логики: потоки делают 1000 сообщений, далее нужно чтобы один из всех поток делал отправку на проверочную почту (самому себе), проверял доставку в "инбокс" и если всё успешно, то работа продолжалась дальше, т.е. потоки снова начали отправлять следующую 1000 сообщений.
Изначально логично было подступиться к глобальным переменным, но прочитав форум понял, что с ними багов предостаточно, к тому же потоки могут случайно одновременно лезть к переменной, ещё больше напрягся из-за предстоящей запары. Далее пришла костыльная идея, опять же с форума, про общий список на проект (Вложение 1), сделал список, привязанный к файлу, с цифрами от 1 до 1000, логика следующая: каждый проект после отправки сообщения берёт число из списка с удалением, начиная с 1, как только список заканчивается, он сразу же пополняется вновь числами от 1 до 1000 (чтобы другие потоки не залезли в красную ветку), а затем активируется проверочная логика, посредством установки "1" переключателю логики (простая отправка/отправка себе-проверочная)
И вроде бы костыль работает, то есть один поток обнаруживает, что список-счётчик пуст, пополняет список, активирует проверочную логику и делает проверочную отправку, проверяет, но есть проблема: остальные потоки продолжаюбт работать, ведь общий список уже пополнился сразу после того, как он был замечен пустым, а если письмо не дошло, то по логике должна быть "стоп-машина", но на деле всё иначе. Если убрать это пополнение списка в конец, т.е. поток проверил доставку и только поток дал старт другим потокам работать, то их нужно как-то занять, чтобы они не упали.
Следственно, нужно придумать что-то, чтобы в случае если проверка показало, что письмо не дошло, то:
1) Все потоки останавливали свою работу и в Зенно нельзя было добавить новые попытки выполнения.
2) Либо сделать так, чтобы 1 поток делал проверку, все остальные простаивали, как только проверка прошла, работа потоков продолжалась.
Но мне что-то в голову уже ничего не лезет, может кто-то всё-таки "дободался" с этой темой до нормального решения? Глобальные переменные или всё-таки костыль?
Последнее редактирование: