Как не обнулять глобальную переменную при добавлении потока?

skorpeeon

Client
Регистрация
05.02.2017
Сообщения
34
Благодарностей
1
Баллы
8
В проекте есть одна глобальная переменная (баланс всех аккаунтов), к которой прибавляются числа из каждого потока этого проекта (каждый поток - 1 аккаунт). Когда первый раз проект запускается все работает как нужно, но если в процессе работы к нему добавить еще дополнительные потоки, то эта переменная обнуляется. Наверное потому что там по-умолчанию стоит значение 0, чтобы при первом запуске проекта было к чему прибавлять баланс.
Вопрос - как избежать обнуления переменной при добавлении потоков?
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Может не ставить значение по умолчанию?
 

skorpeeon

Client
Регистрация
05.02.2017
Сообщения
34
Благодарностей
1
Баллы
8

S16er1um

Client
Регистрация
14.04.2016
Сообщения
826
Благодарностей
240
Баллы
43
Тогда к ней не получится прибавить число
Код:
09:00:36    Выполнение действия VariableOperations Переменная не число
в начале проэкта присваеваете значение глобальной переменной - какой-то локальной переменной, а дальше делаете с глобальной что хотите, но в проэкте используете локальную

П.С. В ПМе удалите глобальную переменную и добавте действие её инициализации при старте проэкта.
Условие if. Если глобальная переменная существует - идём дальше. Если нет - инициализируете её нулём и идёте дальше
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113

S16er1um

Client
Регистрация
14.04.2016
Сообщения
826
Благодарностей
240
Баллы
43

Значение 1 глобальной задал просто для примера. существуют ситуации , где вам нужно несколько раз в одном потоке обращаться к глобалке и после выполнения определённых действий допустим увиличивать её. При этом вы работаете в 100500 потоков, допустим. То есть получается, что в один прекрасный момент при каких-то условиях вам в рамках одного потока нужно использовать переменную в начале и в конце своих действий. Вначале получилось, что вы взяли одно значение, но когда инстанс подходит к завершению велика вероятность, что эту ГЛОБАЛЬНУЮ переменную другой инстанс уже увеличил и поэтому ваши данные будут брать уже УВЕЛИЧЕНУЮ глобальную, а вам нужно то значение - что было вначале работы. Поэтому лучше присвоить вначале действий значение глобальной переменной, какой-то локальной переменной, а дальше уже можно с глобальной делать что хотите, так как вы будете работать с ЛОКАЛЬНОЙ, которая действительна лишь для данного инстанса

Тут (в ПМе) должно быть пусто
upload_2017-4-7_12-38-25.png

Во всяком случае раньше так было, что нужно было удолять. Может сейчас пофиксили. Давно с глобальными не работал
 
Последнее редактирование:

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113

skorpeeon

Client
Регистрация
05.02.2017
Сообщения
34
Благодарностей
1
Баллы
8
в начале проэкта присваеваете значение глобальной переменной - какой-то локальной переменной, а дальше делаете с глобальной что хотите, но в проэкте используете локальную

П.С. В ПМе удалите глобальную переменную и добавте действие её инициализации при старте проэкта.
Условие if. Если глобальная переменная существует - идём дальше. Если нет - инициализируете её нулём и идёте дальше
Такое не подойдет, потому что глобалка очень часто меняется. Там такая логика - в каждом потоке работает аккаунт на сайте, который зарабатывает некие очки. А в глобалке хранится сумма заработанных очков со всех потоков, чтобы можно было в любой момент посмотреть сколько заработали все аккаунты. Она постоянно обновляется. Поэтому нужно как-то прибавлять очки именно к ней, а не хранить ее в каждом потоке в локальной переменной.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Такое не подойдет, потому что глобалка очень часто меняется. Там такая логика - в каждом потоке работает аккаунт на сайте, который зарабатывает некие очки. А в глобалке хранится сумма заработанных очков со всех потоков, чтобы можно было в любой момент посмотреть сколько заработали все аккаунты. Она постоянно обновляется. Поэтому нужно как-то прибавлять очки именно к ней, а не хранить ее в каждом потоке в локальной переменной.
Ну в этом случае может стоит писать значения в локальную переменную (это для каждого потока) а с нее уже суммировать в глобальную.
 

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