Нужна помощь в многопотоке... Как выполнить определенное действие всего 1 раз?

Mostick

Client
Регистрация
09.06.2019
Сообщения
61
Благодарностей
23
Баллы
8
Добрый вечер. Подскажите пожалуйста, как выполнить определенные действия в ZennoPoster, в многопотоке всего 1 раз?

Пример: Мне нужно отправить запрос на сайт и получить оттуда нужное значение (Которое меняется раз в сутки). После него уже подставлять это самое значение во все остальные потоки.

Если брать другой софт - там это все реализовать очень просто.

Сначала ты вызываешь 1 функцию, устанавливаешь глобальную переменную и уже после - вызываешь функцию в многопотоке.
Тут вроде тоже есть проект в проекте, ну к сожалению нет реализации вызова проекта в 500 потоков к примеру.

Я понимаю что данное решение можно сделать через глобальные переменные, ну вот почему то не понимаю как правильно это реализовать.

В идеале было бы сделать так, брать bool значение с входных настроек "Проверять значение или нет" и уже после - 1 раз выполнить запрос, записать в глобальную и после - проверять ее существование.

Но я столкнулся с проблемой. Глобальная переменная не меняется если в ней уже есть запись. Для того чтоб она поменялась, нужно перезапускать весь ZennoPoster. А как правильно реализовать логику, я просто не ПОНИМАЮ!

Есть костыль, ну мне бы хотелось более четкого решения.

Пример костыля следующий.

В начальных настройках создаем переменную - сколько всего раз отправлять запрос на проверку нужного значения.

Далее все это обворачиваем в lock(SyncObjects), записываем счетчик в глобальную переменную и если счетчик глобальной не больше переменной из входных настроек, тогда отправляем запрос и инкрементируем глобалку.

После этого наша глобалка уже будет >= 1, в таком случае запрос не отправиться....



Может есть вариант получше? Почему все так должно быть через такую ж**у?
 
Последнее редактирование модератором:
  • Спасибо
Реакции: devffy

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 418
Благодарностей
5 454
Баллы
113
  • Спасибо
Реакции: Mostick

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 528
Благодарностей
1 324
Баллы
113
Добрый вечер. Подскажите пожалуйста, как выполнить определенные действия в ZennoPoster, в многопотоке всего 1 раз?

Пример: Мне нужно отправить запрос на сайт и получить оттуда нужное значение (Которое меняется раз в сутки). После него уже подставлять это самое значение во все остальные потоки.

Если брать BAS - там это все реализовать очень просто.

Сначала ты вызываешь 1 функцию, устанавливаешь глобальную переменную и уже после - вызываешь функцию в многопотоке.
Тут вроде тоже есть проект в проекте, ну к сожалению нет реализации вызова проекта в 500 потоков к примеру.

Я понимаю что данное решение можно сделать через глобальные переменные, ну вот почему то не понимаю как правильно это реализовать.

В идеале было бы сделать так, брать bool значение с входных настроек "Проверять значение или нет" и уже после - 1 раз выполнить запрос, записать в глобальную и после - проверять ее существование.

Но я столкнулся с проблемой. Глобальная переменная не меняется если в ней уже есть запись. Для того чтоб она поменялась, нужно перезапускать весь ZennoPoster. А как правильно реализовать логику, я просто не ПОНИМАЮ!

Есть костыль, ну мне бы хотелось более четкого решения.

Пример костыля следующий.

В начальных настройках создаем переменную - сколько всего раз отправлять запрос на проверку нужного значения.

Далее все это обворачиваем в lock(SyncObjects), записываем счетчик в глобальную переменную и если счетчик глобальной не больше переменной из входных настроек, тогда отправляем запрос и инкрементируем глобалку.

После этого наша глобалка уже будет >= 1, в таком случае запрос не отправиться....



Может есть вариант получше? Почему все так должно быть через такую ж**у?
Мне тяжело понять логику, если не верно понял, постарайтесь либо показать пример, либо обьяснить по другому.

У вас есть 1 проект, который должен получить информацию и разложить по переменным и эти переменные должны перенестись в другие проекты - после чего работать с этими переменными. Если так, тогда самое простое решение, привязать MySQL базу данных, в нее будем записывать переменные из 1вого проекта - если переменные все заполнены - в одном из столбцов базы данных ставим единичку - что симвозлизирует - переменные заполнены, и можно эту строку забирать другим проектам, что все хорошо, после чего с помощью батника - запускаем нужные вам проекты и они уже обращаясь в базу данных будут получать нужную вам информацию из 1 проекта и делать что скажите .
 
  • Спасибо
Реакции: Сибиряк
Регистрация
12.07.2014
Сообщения
916
Благодарностей
373
Баллы
63
Мне тяжело понять логику, если не верно понял, постарайтесь либо показать пример, либо обьяснить по другому.

У вас есть 1 проект, который должен получить информацию и разложить по переменным и эти переменные должны перенестись в другие проекты - после чего работать с этими переменными. Если так, тогда самое простое решение, привязать MySQL базу данных, в нее будем записывать переменные из 1вого проекта - если переменные все заполнены - в одном из столбцов базы данных ставим единичку - что симвозлизирует - переменные заполнены, и можно эту строку забирать другим проектам, что все хорошо, после чего с помощью батника - запускаем нужные вам проекты и они уже обращаясь в базу данных будут получать нужную вам информацию из 1 проекта и делать что скажите .
Точно-точно, делал тут комбайн из парсера, генератора страниц, т.к. знаний си шарпа ноль и с глобальной переменной так и не допер что и как. Проще оказалось через БД работать и данные сохранять.
 

Mostick

Client
Регистрация
09.06.2019
Сообщения
61
Благодарностей
23
Баллы
8
Всем большое спасибо! 1-й вариант подошел идеально!
 
  • Спасибо
Реакции: Mikhail B.

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)