Обновить файл(список)

fargot31

Client
Регистрация
26.09.2017
Сообщения
89
Благодарностей
28
Баллы
18
Подскажите,есть шаб,работает в многопотоке,каждый поток берет строки из списка,и в процесе выполнения по логике может добавить строки обратно,но следующий поток когда считает к-во строк,не видит ети строки, уже сам смотрю что в файле(списке) остаеться несколько сотен строк,пересохраняю файл в нотпаде в ручную.
Можно как то обновлять список при достижении n-ого количества строк?
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 453
Благодарностей
5 473
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

т.е. вы записываете строку в список, но ее не видят потоки?
 

fargot31

Client
Регистрация
26.09.2017
Сообщения
89
Благодарностей
28
Баллы
18
Каждый поток считает строки и выводит в лог,если предыдущий поток взял 20 строк и добавил обратно,то следущий поток етих 20 строк не подсчытывает,получаеться не видит,по истечению строк по подсчетам зенки,потоки начинают некоректно добавлять строки и в файле каша,в файле есть например 5к строк,а поток выдает 0.
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 453
Благодарностей
5 473
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

Каждый поток считает строки и выводит в лог,если предыдущий поток взял 20 строк и добавил обратно,то следущий поток етих 20 строк не подсчытывает,получаеться не видит,по истечению строк по подсчетам зенки,потоки начинают некоректно добавлять строки и в файле каша,в файле есть например 5к строк,а поток выдает 0.
Запись в список лочите?
 

fargot31

Client
Регистрация
26.09.2017
Сообщения
89
Благодарностей
28
Баллы
18

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 453
Благодарностей
5 473
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

Да,все работы со списком в lock-ах
Условно говоря, было 100 строк, 20 взяли, через минуту добавили 20 обратно и через секунду новый поток проверяет список и видит не 100 строк как должно быть, а 80. Верно?

Пробовали в локе паузу ставить после записи? Например 5 сек для проверки.
 

fargot31

Client
Регистрация
26.09.2017
Сообщения
89
Благодарностей
28
Баллы
18
Условно говоря, было 100 строк, 20 взяли, через минуту добавили 20 обратно и через секунду новый поток проверяет список и видит не 100 строк как должно быть, а 80. Верно?

Пробовали в локе паузу ставить после записи? Например 5 сек для проверки.
Да,все верно.Паузу не ставил,сейчас поставлю и посмотрю.
 
  • Спасибо
Реакции: Mikhail B.

fargot31

Client
Регистрация
26.09.2017
Сообщения
89
Благодарностей
28
Баллы
18
Пауза не помогла,вот поток подсчытал строки как 12 строк,на самом деле там 61 строка была https://prnt.sc/tk59jt
Следующий поток уже не смог взять строки,он должен был взять больше 12 строк,в итоге все строки из файла удалились https://prnt.sc/tk5akc
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 453
Благодарностей
5 473
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

Файл как привязан? Покажите настройки.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 587
Благодарностей
3 401
Баллы
113
  • Спасибо
Реакции: Mikhail B.

fargot31

Client
Регистрация
26.09.2017
Сообщения
89
Благодарностей
28
Баллы
18
Файл как привязан? Покажите настройки.
Если имееться ввиду,как список привязан к файлу,то вот настройки https://prnt.sc/tk5gk1

//Берем строки
lock(SyncObjects.ListSyncer) {
////Привязываем список к файлу
var baza = project.Lists["для отправки"];
baza.Bind(@"ПУТЬ К ФАЙЛУ");

var m = int.Parse(project.Variables["ПЕРЕМЕНАЯ"].Value);
var str = project.Lists["для отправки"];
var count = m; // сколько строк брать

var stra = string.Join(",+\r\n", str.Take(count));
project.Variables["ПЕРЕМЕНАЯ"].Value = stra;
for (int i = 1; i <=m; i++) {
str.RemoveAt(0);
}

project.Variables["strok_v_baze"].Value = baza.Count.ToString();
//return baza.Count();

System.Threading.Thread.Sleep(2300);
}



//Добавление строк в случае ошибки
lock (CommonCode.BAZA){

IZennoList list = project.Lists["для отправки"];
///Добавляем строку
list.Add(project.Variables["ПЕРЕМЕНАЯ"].Value);
list.Add(project.Variables["ПЕРЕМЕНАЯ1"].Value);

//System.Threading.Thread.Sleep(5000);
}
 
Последнее редактирование:
  • Спасибо
Реакции: Mikhail B.

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 651
Баллы
113
Если имееться ввиду,как список привязан к файлу,то вот настройки https://prnt.sc/tk5gk1

//Берем строки
lock(SyncObjects.ListSyncer) {
////Привязываем список к файлу
var baza = project.Lists["для отправки"];
baza.Bind(@"ПУТЬ К ФАЙЛУ");

var m = int.Parse(project.Variables["ПЕРЕМЕНАЯ"].Value);
var str = project.Lists["для отправки"];
var count = m; // сколько строк брать

var stra = string.Join(",+\r\n", str.Take(count));
project.Variables["ПЕРЕМЕНАЯ"].Value = stra;
for (int i = 1; i <=m; i++) {
str.RemoveAt(0);
}

project.Variables["strok_v_baze"].Value = baza.Count.ToString();
//return baza.Count();

System.Threading.Thread.Sleep(2300);
}



//Добавление строк в случае ошибки
lock (CommonCode.BAZA){

IZennoList list = project.Lists["для отправки"];
///Добавляем строку
list.Add(project.Variables["ПЕРЕМЕНАЯ"].Value);
list.Add(project.Variables["ПЕРЕМЕНАЯ1"].Value);

//System.Threading.Thread.Sleep(5000);
}
где лок при взятии и удалении? Зачем один и тот же список прокидывать в несколько переменных?
 
  • Спасибо
Реакции: Mikhail B.

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 453
Благодарностей
5 473
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

Вот такие коды использую, проблем не было.

Запись
C#:
var List1 = project.Lists["БАЗА ОТВЕТОВ"];
var url2 = "ID:" + project.Variables["message_id"].Value + "|" + "Login_Pass:" + project.Variables["Telegram_Login_Pass"].Value + "|" + "Proxy:" + project.Variables["Telegram_proxy"].Value + "|" + "URL_DIALOG:" + project.Variables["URL_dialog_Telegram"].Value + "|" + "Message:" + project.Variables["INPUT_MESSAGE"].Value + "|END";
lock(SyncObjects.ListSyncer)
{
    if (url2 != "")
    {
    List1.Add(url2);
        return "Ok";
    }
}
Чтение с удалением. Правда тут обращение к списку немного другое, брал с разных проектов коды.
C#:
IZennoList GeneralList = project.Lists["GENERAL-LIST"]; //Получаем указатель на лист с проксями

int count = 2;
for (int i = 0; i < count; i++)
{
    string url = string.Empty;
  
    lock (SyncObjects.ListSyncer)
    {
        if (GeneralList.Count > 0)
        {
            url = GeneralList[0];
            GeneralList.RemoveAt(0);
            return url;
        }
    }
    System.Threading.Thread.Sleep(1 * 500);
}
throw new Exception("");
 
Последнее редактирование:
  • Спасибо
Реакции: luk911

fargot31

Client
Регистрация
26.09.2017
Сообщения
89
Благодарностей
28
Баллы
18
где лок при взятии и удалении? Зачем один и тот же список прокидывать в несколько переменных?
Я думал лок на все идет,в начале
//Берем строки
lock(SyncObjects.ListSyncer)

Ето в разых кодах стоит,взятие в начале проекта,и добавление в конце если нужно
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 651
Баллы
113
Я думал лок на все идет,в начале
//Берем строки
lock(SyncObjects.ListSyncer)

Ето в разых кодах стоит,взятие в начале проекта,и добавление в конце если нужно
да, просмотрел я. Только это ничего не меняет. Локи разные и друг друга не перекрывают
 
  • Спасибо
Реакции: Mikhail B.

fargot31

Client
Регистрация
26.09.2017
Сообщения
89
Благодарностей
28
Баллы
18

fargot31

Client
Регистрация
26.09.2017
Сообщения
89
Благодарностей
28
Баллы
18
Не обновляеться все равно,в файле есть строки,последний поток насчытал 5 а их намного больше,выходит по ошибке и файл полностью очищает https://prnt.sc/tk7tzn
Как его обновить фиг знает,перед доблением и взятием привязываю файл к списку.
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 453
Благодарностей
5 473
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

Не обновляеться все равно,в файле есть строки,последний поток насчытал 5 а их намного больше,выходит по ошибке и файл полностью очищает https://prnt.sc/tk7tzn
Как его обновить фиг знает,перед доблением и взятием привязываю файл к списку.
Пример шаблона скиньте @Zymlex
 

fargot31

Client
Регистрация
26.09.2017
Сообщения
89
Благодарностей
28
Баллы
18

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