powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
14 сообщений из 14, страница 1 из 1
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39799973
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток! Прошу помощи уважаемого сообщества.
Суть: пишу относительно небольшое приложение для получения информации с контроллера Siemens S400.
Приложение должно с определенным интервалом времени "снимать" показания с разных датчиков.
Для связи с контроллером использую библиотеку S7.Net, и тут главная загвоздка - библиотека не умеет использовать нескольких одновременных подключений. а значит опрос нужно проводить последовательно.
Для понимания логики работы кратко опишу алгоритм одного из элементов:
1) С интервалом 1сек считываем показания с датчика наличия (D1), на входе в зону.
2) Как только получили true, останавливаем опрос текущего датчика, и начинаем считывать с периодом показания с двух других (D2 - датчик наличия на выходе, период опроса 1сек, D3 - текущее давление, период опроса 100мс).
3) Пока D2 не вернет true, значения с D3 собираем в массив, затем математика.
4) Запускаем весь цикл по новой.

Изначально попробовал сделать на System.Timers.timer'ах:


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
static object loker = new object();
static list<double> array = new list<double>();

Static void Main(string args)
{
timer_Entry.Start(); // в timer_Entry.Elapsed вызывается read_Entry()
}

public void read_Entry()
{
lock (locker)
{
bool result = (bool)(plc.read("I1.1")); // здесь получаем значение на вход
if (result)
{
array.clear();
timer_Entry.Stop();
timer_Exit.Start(); // в timer_Exit.Elapsed вызывается read_Exit()
timer_Read.Start(); // в timer_Read.Elapsed вызывается read_Data()
}
}
}

read_Exit()
{
lock (locker)
{
bool result = (bool)(plc.read("I1.2")); // здесь получаем значение на выход
if (result )
{
timer_Exit.Stop();
timer_Read.Stop();
timer_Entry.Start();
pareseArray();
}
}
}

read_Data()
{
lock (locker)
{
array.add(Convert.ToDouble(plc.Read(DataType.DataBlock, 1, 1, VarType.Real, 1))); //здесь получаем текущее давление и пишем в массив
}
}



Модератор: Учимся использовать тэги оформления кода - FAQ

И вроде все работает, за исключение Большого НО : из за Timer.AutoReset = true создается куча потоков, которые не получается убить Timer.stop(); Timer.Dispose(); как я тут только не пробовал... OutOfMemoryExeption
В результате Timer.AutoReset поставил в false, и вызывал Timer.Start(). Плодов не принесло.

Как правильно организовать подобную задачу на таймерах? Или создавать новые потоки каждый раз, потом Thread.Sleep(), а затем убивать их? Кстаи, Thread.CurrentThread.Abort() у меня почему-то тоже не получилось. Или использовать другое решение? Есть добрые люди которые смогут подсказать?
ЗыСы: многопоточность для меня очень новое понятие.
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39799977
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgenмногопоточность для меня очень новое понятие.сначала докажи что потоки нужны тут позарез.
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39800034
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше Task.Delay()
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39800257
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39800272
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Докажи, что не нужны.

Офтоп:
Дежуришь ты здесь что ли. Как новая тема, так твой ответ первый, причем с минимумом полезной информации.
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39800297
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgen,
Вот смотри.
Теги оформления сообщения ставить тебе в лом.
Тег src ты не применяешь.
Отступов в коде нет.
Тег QUOTE тоже.
Это говорит о том, что в голове и в коде у тебя такой же бардак.
Если для тебя многопоточность новое понятие, то учись и не показывай свой ЧСВ.
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39800307
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Вот я и говорю, ничего дельного. Если по теме нечего сказать, то что ты тут делаешь?
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39800321
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgenДокажи, что не нужны.а ты умную вещь написал?
Априори код пишется без uses Thread.
Это не надо доказывать.
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39800327
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgenPetro123,
Вот я и говорю, ничего дельного. Если по теме нечего сказать, то что ты тут делаешь?
А Вы на гифку в его профиле посмотрите:



Вот это и делает...
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39800330
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Два кодировщика без пробелов уже нашли друг друга. Переписываются).
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39800331
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgen,

а я бы копнул в сторону Functional Reactive Programming
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39800332
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Два кодировщика без пробелов уже нашли друг друга. Переписываются).
Смени прошивку уже, остроумия не хватает
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39800334
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Не трудись печатать. Фильтр стоит))
...
Рейтинг: 0 / 0
Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
    #39800336
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Не трудись печатать. Фильтр стоит))
Фиговый фильтр... Пропускает слишком много офтопа от тебя
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Timer.Elapsed vs Thread.sleep vs Что-то еще? И управление потоками
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]