Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Исключения в C++ (7 стр)

Исключения в C++ (7 стр)

Страницы: 13 4 5 6 7 8 Следующая »
MrShoorУчастникwww17 мая 20187:43#90
skalogryz
> Но не факт, что ESockError бросает код, который я имею техническую возможность
> поменять.
А тебе и не нужно менять чужое исключение, тебе нужно его обрабатывать. Если же ты поднимаешь собственное исключение то тут ты можешь добавить какой угодно инфы в исключение.

skalogryz
> а это не схоже с твоим предложением обернуть try..except вокруг
> DoNetworkLogic() и DoOtherNetworkLogic()?
Совершенно не схоже. Внутри DoNetworkLogic сложный пользовательский код. Код самого программиста. Кроме автор библиотеки, поднимающей исключение должен понимать как именно будут использовать его библиотеку. Если send завершился с ошибкой, то вполне вероятно что прямо на месте у программиста не будет возможности восстановить полностью стейт с учетом всей логики протокола. Поэтому есть смысл поднять исключение . В случае же strtoint это бред, потому что это элементарная функция, а не сложная система из объектов и логики, где на месте нельзя решить что делать. Более того само исключение EConvertError никакой логики не несет совершенно. Какой смысл иметь EConvertError на несколько уровней выше по стеку - мне непонятно (в отличие от ESockError)

skalogryz
> raise EMySockError.Create('DoOtherNeworkLogic', E.Message)
Это кстати правильный подход. Если библиотека А использует библиотеку В, и тот, кто будет использовать библиотеку А не должен ничего знать о библиотеке В, библиотека А должна обработать все исключения библиотеки В, и если что то она не может обработать - то рейзить уже свое исключение.

skalogryz
> except
> on e:EMySockError do
> ...
> end;
Но вот эта обработка тут лишняя. Ты бы мог сразу вызывать функцию, вместо еще одного рейза.

innuendoПостоялецwww17 мая 20187:46#91
MrShoor
мне вот интересно, откуда у тебя столько свободного времени на работе (если ты работаешь конечно)
я вот на работе могу только пару строчек в день вставить :)

Правка: 17 мая 2018 7:47

MrShoorУчастникwww17 мая 20187:54#92
innuendo
Я в 10 вечера не работаю

Правка: 17 мая 2018 8:03

RikkПостоялецwww18 мая 20180:59#93
Изображение


Если (в тексте) не врут , то всем понятно и вполне для всех очевидно , что возможно написать такую программу которая сожжёт компьютер.
Вы такое делали?

Правка: 18 мая 2018 1:02

ZabПостоялецwww18 мая 20186:27#94
Rikk
> Если (в тексте) не врут , то всем понятно и вполне для всех очевидно , что
> возможно написать такую программу которая сожжёт компьютер.
> Вы такое делали?
Ты разрабатываешь процессоры? Эта "программа", которая может сжечь что-то, находится в памяти микрокоманд, если ты не понял. У тебя нет возможности эту память перезаписывать, она прошита намертво разработчиком процессора.
Возможно в каких-то RISC-процессорах такая возможность есть, но сильно сомневаюсь. Скорее всего там не будет никаких MBR. Микрокоманд там тоже нет, за ненадобностью.
DelfigamerПостоялецwww18 мая 20188:42#95
Zab
> Возможно в каких-то RISC-процессорах такая возможность есть, но сильно
> сомневаюсь. Скорее всего там не будет никаких MBR.
В отличие от x86, где обращения к памяти идут аргументами, в RISC используются специальные инструкции, которые загружают данные из памяти в регистры, а арифметика/логика производится только над регистрами.
Например,
struct point_t
{
  int x;
  int y;
};

point_t& operator+=(point_t& a, point_t const& b)
{
  a.x += b.x;
  a.y += b.y;
  return a;
}
на x86 компилируется в
int* operator+=(int* rdi, int* rsi)
{
  int edx = rsi[0]; // movl (%rsi), %edx
  int* rax = rdi;   // movq %rdi, %rax
  rdi[0] += edx;    // addl %edx, (%rdi)
  edx = rsi[1];     // movl 4(%rsi), %edx
  rdi[1] += edx;    // addl %edx, 4(%rdi)
  return rax;       // ret
}
Тогда как на PPC:
int* operator+=(int* r3, int* r4)
{
  int r6 = r4[0];  // lwz 6,0(4)
  int r7 = r4[1];  // lwz 7,4(4)
  int r8 = r3[0];  // lwz 8,0(3)
  int r10 = r3[1]; // lwz 10,4(3)
  r8 = r8 + r6;    // add 8,8,6
  r10 = r10 + r7;  // add 10,10,7
  r3[0] = r8;      // stw 8,0(3)
  r3[1] = r10;     // stw 10,4(3)
  return r3;       // blr
}
То есть, прямого доступа к внутренним "регистрам" архитектуры инструкций не дают.

Ну и вообще - причём здесь исключения?

Правка: 18 мая 2018 8:43

Ghost2Постоялецwww18 мая 20188:50#96
Rikk

> Вы такое делали?
Вчера, после обеда.

RikkПостоялецwww18 мая 20189:27#97
Zab
> нет возможности эту память перезаписывать
flash-type
Zab
> Скорее всего там не будет никаких MBR
смысл не уникально-персонально регистр по имени эм.
а смысл — значения от многих регистров передать .тогда сгорит.

Правка: 18 мая 2018 9:38

DelfigamerПостоялецwww18 мая 20189:53#98
Дикий оффтоп, конечно, но не важно - тема интересная.

Rikk
> flash-type
Ну давай, расскажи, как ты будешь перепрошивать какой-нибудь Core i7.

Rikk
> смысл не уникально-персонально регистр по имени эм.
> а смысл — значения от многих регистров передать .тогда сгорит.
И как, по-твоему, это сделать?
И, если это возможно, почему до сих пор не появилось вирусов, которые портят процессор? Вот портящие BIOS - есть. А портящие ЦП? Где они?

RikkПостоялецwww18 мая 201810:06#99
Delfigamer
> как ты будешь перепрошивать
в принципе.
запишу программатором  плашку памяти , поменяю. ведь меняют же плашки памяти bios(то есть сам своими руками вполне себе доступ к критически важному узлу).
Delfigamer
> как, по-твоему, это сделать?
если не высшая магия избранных пляши с бубном, а как стандартное техническое средство  —- очевидно —- компьютер работает под управлением программ———очевидно следует написать такую программу.
Delfigamer
> почему до сих пор не появилось вирусов, которые портят
возможно существуют а мы про это не слышали.
 

Правка: 18 мая 2018 10:13

DelfigamerПостоялецwww18 мая 201811:13#100
Rikk
> запишу программатором
Изображение
Обозначь на рисунке, какие выводы программатора к каким выводам процессора ты будешь подключать.

Rikk
> плашку памяти , поменяю
Изображение
Обведи кружочком, какую плашку памяти ты здесь будешь менять.

Rikk
> то есть сам своими руками вполне себе доступ к критически важному узлу
Изображение
Покажи мне, к какому узлу и какими руками ты собрался допускаться.

Правка: 18 мая 2018 11:18

ZabПостоялецwww18 мая 201811:17#101
Rikk
> запишу программатором плашку памяти
Какой программатор? Какая "плашка памяти"? Оно же все в кристалле процессора прошито.
"Когда процессоры были большие" и занимали шкаф, а не кристалл, в них можно было что-то поменять. На СМ-1700, например, это советский вариант VAX-11, память микрокоманд грузилась с кассеты от бытового магнитофона.

Были вирусы, которые винчестеры жгли. Как тогда рассказывали "раскачивали головки, вводили в резонанс". Про раскачку это вранье, жгли другим способом. Была у винчестеров IBM образца 1983 года уязвимость, команду тестирования нельзя было выполнять несколько раз подряд, схемы перегревались. Очень популярная модель, передирали ее все кому не лень в те времена, вместе с уязвимостью. В том числе и советские винчестеры на 5 и 10Мб были этого типа.

RikkПостоялецwww18 мая 201811:20#102
Delfigamer
то есть вы вполне понимаете что возможен акт промышленной диверсии при производстве на фабрике в массовом масштабе.
 

Правка: 18 мая 2018 11:23

DelfigamerПостоялецwww18 мая 201811:21#103
Rikk
╮(°ε°╮) Ты меня потерял.

Правка: 18 мая 2018 11:24

RikkПостоялецwww18 мая 201811:27#104
Delfigamer
> Ты меня потерял.
зато умные китайцы нашли разумные объяснения .тот скандал откатить на обратное и устанавливать windowsXP вместо новых.этот факт вы должны бы помнить (была такая шумиха).
показываю——тот модуль внизу справа....icluding DMI..and misc I/O  . выводы I/O ввод-вывод подключаются на шину. возможно через них?(ну вообще в принципе.как средство ввод-вывода).
вам там даже черным по белому подписали —- misc I/O—miscellanous—- разный ; смешанный ; прочий ввод-вывод.

Правка: 18 мая 2018 11:31

Страницы: 13 4 5 6 7 8 Следующая »

/ Форум / Программирование игр / Общее

2001—2018 © GameDev.ru — Разработка игр