powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Зависает при многопоточности
23 сообщений из 23, страница 1 из 1
Зависает при многопоточности
    #38632922
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток.Помогите советом, несколько дней бьюсь, все перепробовал. Никак не могу разобраться в чем проблема, есть dll, которая забирает данные с устройств по TCPIP при однопоточности все норм, а при использовании многопоточности все зависает, а иногда и проскакивает и к тому же не все потоки отрабатывают... В чем может быть причина?
Код не сложный:
Код: 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.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
 class Program
    {
        public static int Main(string[] args)
        {

            BBB c1 = new BBB();
            BBB c2 = new BBB();
            BBB c3 = new BBB();
            BBB c4 = new BBB();
            BBB c5 = new BBB();
            Parallel.Invoke(c1.W, c2.W, c3.W, c4.W, c5.W);

            Console.ReadKey();
            return 0;
        }
        class BBB
        {
            libnodave.daveOSserialType fds;
            libnodave.daveInterface di;
            libnodave.daveConnection Connect;
            private Object thisLock = new Object();
           public BBB()
           {
               Console.WriteLine("Сокет {0}", Task.CurrentId);
               fds.rfd = libnodave.openSocket(102, "192.168.4.115");
               fds.wfd = fds.rfd;
               if (fds.rfd > 0)
               {
                   di = new libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);
                   di.setTimeout(1000);
                   Connect = new libnodave.daveConnection(di, 0, 0, 2);
                   Connect.connectPLC();
               }
               else
                   Console.WriteLine("Ошибка в потоке {0}", Task.CurrentId);
           }
            public void W()
            {
                    for (int y = 0; y < 1;y++ )
                    {
                        using (libnodave.PDU p = Connect.prepareReadRequest())
                        {
                            p.addVarToReadRequest(libnodave.daveDB, 102, 2, 3);
                            p.addVarToReadRequest(libnodave.daveDB, 102, 6, 3);
                            using (libnodave.resultSet rl = new libnodave.resultSet())
                            {
                                    Connect.execReadRequest(p, rl);
                                    for (int x = 0; x < 19; x++)
                                    {
                                        if (Connect.useResult(rl, x) == 0)
                                        {
                                            Console.WriteLine("Значение{0}|{1}:{2}|{3}|{4}", 1, x + 1, Connect.getFloat(), DateTime.Now.ToString("mm:ss.fff"), Task.CurrentId);
                                        }
                                        else
                                            Console.WriteLine("Error");
                                    }
                                 
                                
                            }
                        }
                    }
                
            }
        }
    }
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38632928
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как понял, зависает при вызове функции Connect.execReadRequest(p, rl);
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38632988
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldar,
авторпри однопоточности все норм, а при использовании многопоточности
не понял, при какой много поточности? на ой стороне, при передаче, или многопоточность на приеме?
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633005
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи, при приеме. Мной используемая dll опрашивает удаленные контроллеры по TCPIP.
При опросе в один поток, все нормально, но медленно, решил сделать многопоточность, зависает.
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633009
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще, если к примеру сделать 2 потока, то отрабатывает, 3 потока отрабатывает чаще, а если больше 4х зависает.
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633017
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldar,
кто вам посоветовал эту реализацию - убейте ( или друга или мозг)
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633029
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи, убиваю свой мозг.
А в чем собственно ошибка, я новичок...
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633031
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldar,

если на приём идёт один поток данных на один порт, то и принимать его можно только в один поток.

Зависает, я думаю, по классической причине гонки: один поток начинает чтение данных, потом другой поток дочитывает эти данные, а первому уже не остаётся, но он продолжает ждать их.
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633037
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petalvik,
На немецком форуме обсуждающие эту библиотеку пишут, что используют в многопоточности до 50 потоков. Но увы не приводят примеры, а я не знаю немецкого чтоб правильно задать им вопрос)...
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633042
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldar,
сокет -> Слушатель ( ваша длл)->(ложим задание)потоконезависимая очередь -> пул потоков, которые берут задания из очереди
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633051
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarpetalvik,
На немецком форуме обсуждающие эту библиотеку пишут, что используют в многопоточности до 50 потоков. Но увы не приводят примеры, а я не знаю немецкого чтоб правильно задать им вопрос)...
скорее всего не разобрались с библиотекой, а ломитесь с какого то банального копипаста..
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633058
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиldar,
сокет -> Слушатель ( ваша длл)->(ложим задание)потоконезависимая очередь -> пул потоков, которые берут задания из очереди
А где про это можно почитать?
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633071
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиldarpetalvik,
На немецком форуме обсуждающие эту библиотеку пишут, что используют в многопоточности до 50 потоков. Но увы не приводят примеры, а я не знаю немецкого чтоб правильно задать им вопрос)...
скорее всего не разобрались с библиотекой, а ломитесь с какого то банального копипаста..
В мануале по dll кроме простенького примера ничего нет, да все функции которые есть, они все в примеру участвуют который я привел.
Как я понял из немецкого форума, они на каждый поток создают свое соединение.
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633072
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldar,авторА где про это можно почитать?
вы как то обескуражили меня, чет тут читать, сел и пиши..
а лучше разберитесь с библиотекой, если она промышленная, то там асинхронность уже вшита ( имхо)
(немцы они не только потрахаться..)
дайте ссылку на нее, может кто и посмотрит.
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633080
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633132
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldar,
само ядро написано на с++, а libnodave.net.dll просто обертка.
что там на форуме подразумевал товарищ-ганс под многопоточностью, скорее в разных потоках слушать разные порты
но не один, однозначно..
ток что делайте обертку над этой либой, или тупо, как я предложил
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633138
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По libnodave доуха обсуждений и примеров на аглицком... нет ни какого смысла дрючить контроллер в 100 потоков... один поток на контроллер на чтение один на обработку, если нужно...
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633156
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,
извиняюсь за глупый вопрос, а зачем делать обертку если она имеется.
А не может быть проблема, в том, что я использую одну обертку для всех потоков, просто в этой обертке используется указатель.
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633201
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buser,
За один запрос можно вытащить 220 Байт, для меня это мало, мне нужно около 7000. За один запрос уходит 150 мс это время выполнение функции execReadRequest(p, rl); , при цикличном опросе занимает больше 10 секунд, дискретность получается высокой.
Может что то надо настроить, почему может быть так много 150 мс.
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633947
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldar,
пробежался по гуглу, уже сделали обертку DotNetSiemensPLCToolBoxLibrary, не пробовали?
я могу ошибаться, мельком взглянул доки, размер получаемого запроса можно регулировать.
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38633996
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи, спасибо за активную помощь мне, я смотрел эту библиотеку, там все равно за один запрос больше 220 байт не вытащишь, т.к. это ограничение устройства с которого тяну данные...Как то же вытаскивают данные другие люди, пока это покрыто тайной...
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38698581
mikola1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldar,

удалось решить проблему?
столкнулся с подобной бедой, и не знаю что делать...
...
Рейтинг: 0 / 0
Зависает при многопоточности
    #38709857
mikola1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор темы пропал.
В общем во много потоков работает если к одному и тому же сокету нет обращений из нескольких потоков...
в общем смотрите что и как и откуда у вас вызывается....
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Зависает при многопоточности
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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