30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Сервер отправляет объект не null, а клиент принимает null20.04.2016, 20:42. Показов 2297. Ответов 33
Метки нет (Все метки)
Помогите пожалуйста! У меня в клиент-серверном приложении творится что-то странное! Короче с сервера на клиент посылается задача, но на клиент она приходит как null. Провел за отладчиком уже несколько дней над этой ошибкой... Проставлял отладочные выводы везде где только можно... Никак не понять каким образом это происходит. Все задачи уходят с сервера не нулевыми это 100%, но как то в полете меняются на null... Самое главное что первые несколько задач клиент принимает и они не null, они нормально передаются. Но в какой то момент раз и null... Вот ссылка на репозиторий с фул проектом: https://github.com/DarkByte2015/CoursedWork_v5. Буду очень признателен если кто то сможет помочь.
Ошибка падает в функции Calculation (на клиенте):
0
|
20.04.2016, 20:42 | |
Ответы с готовыми решениями:
33
Клиент-сервер. Клиент не принимает данные Сервер не принимает сообщения TCP или клиент не отправляет Блин, для ЧЕГО НУЖНА Функция CREATE TABLE invoice( inv_id INT AUTO_INCREMENT NOT NULL , usr_id INT NOT NULL , prod_id INT NOT NULL , quantity INT NOT Клиент отправляет сообщение сервеу, а сервер это отправляет всем клиентам... |
1454 / 846 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|
21.04.2016, 00:16 | 2 |
Dark Byte, опять ты?!!!
Не по теме: Я тебе предложил вариант работы в прошлой теме на Task-ах. Тебе ж не пошло.(хотя тут уже виден маленький прогресс await Task.Run :) уже лучше)
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
21.04.2016, 07:32 [ТС] | 3 |
Я уже говорил что не имею возможности использоваться Task в той части кода где у меня потоки. Одно из заданий - чтобы клиент достаточно четко соблюдал указанную загрузку процессора. У меня этот код на потоках работает. Но стоит переделать на Task (и Task.Delay соответственно) как загрузка процессора сильно увеличивается по сравнению с указанной. Поэтому лучше оставить все как есть. А где это у меня мусор? У меня нормальный код. Теперь уже даже с соблюдением паттерна MVVM. (тут не видно, но в проекте есть)
0
|
1454 / 846 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|||||||||||||||||||||
21.04.2016, 10:48 | 4 | ||||||||||||||||||||
Ещё момент: У тебя есть метод на сервере:
Проверку наличия заданий могут пройти сразу два потока Допустим, что в Jobs есть одна задача, а наш метод вызвали два потока. Оба вызова успели пройти проверку
Но потом первый вызов залочил выполнение и получил последнюю задачу
первый вызов выполнение разлочил, второй решил таки получить свою задачу, но получать нечего! Ему достался null
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
21.04.2016, 11:04 [ТС] | 5 |
LeniumSoft, я уже пробовал залочить эту проверку
if (Jobs.Count > 0) не помогло.
0
|
1454 / 846 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|
21.04.2016, 11:12 | 6 |
Я тебе на
указываю!!!!
У тебя куча косяков в коде! Я пока могу только визуально на код смотреть! Скачать и запустить не могу. Я на работе Дома может посмотрю. Дебаггер нужен...
0
|
12557 / 8726 / 1311
Регистрация: 21.01.2016
Сообщений: 32,738
|
|
21.04.2016, 12:11 | 7 |
Не по теме: LeniumSoft, что мешает ТС-у дебаггером воспользоваться? Почему ты это должен за него делать? Добавлено через 1 минуту Dark Byte, пройдись по своему коду отладчиком. Посмотри что где и как работает на самом деле.
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
21.04.2016, 12:42 [ТС] | 8 |
Каких именно?
Какое из этих двух предложений тебе не ясно?
0
|
1454 / 846 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
||||||
21.04.2016, 12:59 | 9 | |||||
Госпади... Полегче приятель
Я тебе уже пару закинул. Ну и вот это мне поясни
У ТЕБЯ LOCK В TryGiveJob А сам перебор клиентов будет моментальным даже при сотке клиентов.
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
21.04.2016, 14:44 [ТС] | 10 |
Не по теме: Просто бесят такие. Думает он самый умный чтоли. Никто кроме него не догадается отлаживать. Так мало того я написал что отлаживал эту ерунду уже фиг знает сколько, а он в упор не видит. Про Task ответил. Это исключительно ради функции ForAll. Мне просто у IEnumerable всегда не хватает такой штуки типа ForEach / ForAll. Просто запись короче получается чем foreach цикл писать. Ну вреда то от нее точно нет.
0
|
1454 / 846 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
||||||
21.04.2016, 14:56 | 11 | |||||
Эм... И для этого ты PLINQ заюзал?
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
21.04.2016, 14:58 [ТС] | 12 |
Ну да! Я такой извращенец! А про List я знаю у него тоже есть, но подумай сам - когда я юзаю AsParallel не происходит ровно никаких лишних выделений памяти (ну может какой нибудь внутри новый перечислитель создается максимум), а ты хочешь перекопировать всю последовательность в новый список. Это куда затратнее.
0
|
1454 / 846 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|
21.04.2016, 15:14 | 13 |
Не по теме: =-O Ничё ты вогнал сейчас!!! Надо кофейку хряпнуть по этому поводу.... http://referencesource.microso... a720cd0bca Там эту коллекцию на части делит и выделяет по асинхронной задаче на каждую часть. А после этого ещё и клеит результаты обратно.
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
21.04.2016, 15:25 [ТС] | 14 |
Ого! Некисло Я не знал как оно работает. Ну чтож, возможно перепишу на обычный foreach. Но это все не в тему. Мне бы мою ошибку исправить... Кстати могу добавить такую инфу. Поймано отладчиком. Объект не теряется в полете. Он просто уже передается null. С трудом но удалось это зафиксировать. Таким образом ошибка передачи отпадает. А вот почему так происходит вопрос открытый!!! Боюсь что что то перехимичено там с асинхронностью на сервере... Где то недосинхронизируется и все кирдык...
0
|
1454 / 846 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|
21.04.2016, 15:28 | 15 |
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
||||||
21.04.2016, 16:50 [ТС] | 16 | |||||
Хмм мне внезапно пришло в голову что надо собственно выложить этот код где и получается этот null. Если только тут телепаты не успели завестись.
0
|
12557 / 8726 / 1311
Регистрация: 21.01.2016
Сообщений: 32,738
|
|
21.04.2016, 18:49 | 17 |
Какая-то каша, всё в кучу накидано)) Почему ViewModel умеет в MessageBox? Зачем столько асинхрона, если тут же локи используются? А это зачем:
Clients.AsParallel().ForAll(c => c.DisconnectAsync()); ?
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
21.04.2016, 19:34 [ТС] | 18 |
А почему нет? Я только недавно начал изучать MVVM, но не слышал чтобы ViewModel не могла кидать MessageBox.
Чтобы интерфейс не подвисал. А локи потому что чуть что не синхронизируешь как сразу появляются вот такие печальные последствия как этот null. Уже исправил. Добавлено через 30 минут Проблема решена. Оказалось причина была в EndCalculationAsync. В функции ClientCalculated она вызывалась, а следом за ней в TryGiveJob вызывалась BeginCalculationAsync. И они выполнялись параллельно.
0
|
1454 / 846 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|
21.04.2016, 19:38 | 19 |
0
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
21.04.2016, 20:12 [ТС] | 20 |
А можете подсказать еще одну вещь? Видите у меня там свойство TimeLost? Оно типа того обозначает оставшееся время. Высчитывается чрезвычайно примитивным способом который был задан по заданию курсача. Просто берется время за которое выполнилась последняя задача и умножается на количество оставшихся задач. Так вот это время у меня почему то в начале при запуске вычислений начинает расти, а потом идет на спад. Почему так происходит? Насколько я понял у меня вроде как в начале время рассчета одной задачи выше чем в конце. Это как то странно... Все они по одинаковому алгоритму считаются. И у всех один и тот же диапазон.
0
|
21.04.2016, 20:12 | |
21.04.2016, 20:12 | |
Помогаю со студенческими работами здесь
20
Datetime не принимает значение NULL CheckBox не принимает Null через Binding Не работает код: m_web1.Navigate ('gidro.htm',0,0,NULL,NULL); UPDATE SELECT, ERROR: null value in column violates not-null constraint Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Блоги программистов | |||||
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества
Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
|
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов.
. . .
|
С чего начать программировать микроконтроллеры
raxper 06.01.2025
Введение в мир микроконтроллеров
Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
|
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
|
Обновление сайта www.historian.by
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
|
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
|
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list):
s=^y]
p=x and y
for i in range(1,len(x)):
s. append((x^y)^p)
p=(x and y)or(p and (x or y))
return s
x=list()
y=list()
|
Это мы не проходили, это нам не задавали...(асихронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
|
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
|