@yteyyy said in Сервер и автоматическое перемещение окон:
Как пофиксить
Никак.
Знающие, помогите реализовать следующий алгоритм.
Существуют 100 строк, которые нужно вбить в текстовую строку под разными параметрами на сайте. То есть, у сайта существуют разные настройки (меняются на сайте через комбобоксы), которые нужно менять перед каждым вбиванием 100 строк. Настройка сайта 1 - вбить 100 строк - настройка сайта 2 - вбить 100 строк и т.д. Всего около 300 таких "настроек", которые я собираюсь перебирать через вложенные друг в друга for. Соответственно на самом последнем уровне for вбиваются строки.
Для забивания строк я хочу использовать 10 потоков.
Проблема в том, что пока вбиваются строки, настройки сайтаменять нельзя. То есть на вбивании 90-100 строк, один из потоков может уйти на смену настроек, а другие в это время еще будут вбивать строки. Я хочу этого избежать.
Скажите, пожалуйста, как не давать потоку уходить на смену настроек, пока все 100 строк не вбиты под одними настройками сайта?
Использовал foreach для ввода строк(для счета использовал ресурс с 100 строками единичек) но есть проблема преждевременного ухода потоков на смену настроек
@RaunOWW
Спасибо за совет, но проблема в том, что необязательно последняя строка в файле будет вбита последней на сайте из-за различной скорости загрузки, зависания потоков и возможных ошибок.
Здесь необходимо какое-то условие об исчерпании ресурса в цикле, или принципиально иной способ перебирания строк...
Без потоков совсем нет проблемы написать такой алгоритм, а вот с потоками трабла.
@bvvcpa Сделать глобальную переменную, к которой в конце каждого выполнения потока будет прибавляться 1, и проверку, если там у тебя 10 выполнений должно произойти, то цифра 10 в глобальной переменной, и тогда выполнить сохранение настроек. Как-то так...
@bvvcpa Я так понимаю, что вам нужна функция lock, которая дает возможность выполнять код только в одном потоке. В нее нужно обернуть все что идет после load.
Пока этой функции нет, но ее можно легко реализовать:
Вот пример реализации.
@support
Спасибо, но вроде не то, что нужно, либо я не понял смысл функции.
Решил свою проблему следующим образом:
Создал глобальную переменную, которая считает потоки при выходе из for заполнения строк. Соответственно, если поток вышел из цикла заполнения строк, он добавляет к счетчику + 1.
далее поставил while , где через каждую секунду проверяется условие счетчика на количество потоков. Если счетчик равен количество количеству потоков - происходит выход из while.
Далее, условием проверяю номера потоков, если поток первый, то он меняет настройки, сбрасывает счетчик и заходит в цикл заполнения строк. Остальные спят время и тоже заходят в цикл заполнения строк.
Как-то так) Всем спасибо!