Вопрос-Ответ (C++)
| |
Kornival | Дата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1 |
The Witcher
Сейчас нет на сайте
| Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.
Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
|
|
| |
Нохчи | Дата: Воскресенье, 22 Июля 2012, 13:42 | Сообщение # 581 |
заслуженный участник
Сейчас нет на сайте
| Quote (goldsphere) Как узнать сколько регистровых переменных поддерживает процессор? Нет такого понятия вообще. Все зависит от контекста, то есть сколько регистров в данный момент уже используются для чего-то другого. Но обычно можно расчитывать на 2-3 свободных регистра максимум.
Добавлено (22.07.2012, 13:42) --------------------------------------------- Это я говорю о x86, как там с другими архитектурами не знаю.
Многие вопросы по Windows отпадут, если посмотреть тут
Сообщение отредактировал Нохчи - Воскресенье, 22 Июля 2012, 13:43 |
|
| |
Archido | Дата: Воскресенье, 22 Июля 2012, 13:55 | Сообщение # 582 |
Сэнсэй
Сейчас нет на сайте
| Quote (MrAkakuy) Можно так или нет? Я думаю что нет, но если можно, скажите пожалуйста как. Очень надо. Нельзя. Нужно делать по-другому - есть некий класс и его экземпляр(объект), как правило один. У него есть массив, в котором хранятся указатели на базовый класс GameCanvas. При создании дочерних классов, они добавляются в этот самый массив, после чего можно "проходить" по нему и дергать нужные методы каждого.
Quote (goldsphere) Как узнать сколько регистровых переменных поддерживает процессор? Просто любопытно, а нафига тебе нужны эти "регистровые переменные" ?
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Воскресенье, 22 Июля 2012, 13:57 |
|
| |
MrAkakuy | Дата: Воскресенье, 22 Июля 2012, 14:03 | Сообщение # 583 |
участник
Сейчас нет на сайте
| Archido, нихераничего не понял. Quote (Archido) некий класс Game в моем примере? Quote (Archido) указатели на базовый класс Не понял что вы имеете ввиду этой фразой.
Quote (Archido) дергать нужные методы каждого И каким образом это делать?
Сообщение отредактировал MrAkakuy - Воскресенье, 22 Июля 2012, 14:08 |
|
| |
Archido | Дата: Воскресенье, 22 Июля 2012, 14:09 | Сообщение # 584 |
Сэнсэй
Сейчас нет на сайте
| MrAkakuy Мм, ты опиши более точно, что ты пытаешься сделать, чтобя я зря не о том не писал. К дочерим классам прямо обращаться нельзя, т.к. базовый класс о них ничего не знает. Чтобы вызывать методы дочерних нужно хранить их где-нить в массиве (у какого - нить класса - менеджера, который уже и будет обращаться к каждому и дергать нужные методы).
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
MrAkakuy | Дата: Воскресенье, 22 Июля 2012, 14:13 | Сообщение # 585 |
участник
Сейчас нет на сайте
| Archido, спасибо, уже не надо. Без этого обошелся.
|
|
| |
Gavolot | Дата: Понедельник, 23 Июля 2012, 01:23 | Сообщение # 586 |
Последователь Тени
Сейчас нет на сайте
| Люди вопрос а зачем нужны вообще таймеры? Для задержки чего либо? А почему бы просто не использовать Sleep, просто как бы в потоках эта фигня работает точно так как если бы я сделал свой задерживающий таймер (проверено), как можно вообще использовать таймер, чтобы это отличалось от Sleep. Просто Sleep заставляет задерживаться не всю программу, а только поток в котором эта штука определена.
В общем что-то делаю, но пока не пойму ни как :) Тень - выражение основной сущности человека.
|
|
| |
Нохчи | Дата: Понедельник, 23 Июля 2012, 01:35 | Сообщение # 587 |
заслуженный участник
Сейчас нет на сайте
| А кто сказал, что таймер должен задерживать весь поток?
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Gavolot | Дата: Понедельник, 23 Июля 2012, 01:55 | Сообщение # 588 |
Последователь Тени
Сейчас нет на сайте
| Quote А кто сказал, что таймер должен задерживать весь поток? Та что-то я после таймеров ас3 и алармов game maker ни как не могу начать мыслить по С++'ному =)) Не могу я просто вобрать как эти таймеры в С++ использовать, если каждый поток это как бы программа, которая просто сверху вниз идет) Т.е. мне надо просто запустить функцию таймера, а как это потом проверять к примеру, что таймер исполнился, ну проверил к примеру и вызвал какое-то действие, оно исполнилось. Т.е. мне таймер тоже как отдельный поток запускать?
Походу короче надо скорее в вин-апи лезть или куда-то в этом духе, потому-что я привык мыслить событиями)
В общем что-то делаю, но пока не пойму ни как :) Тень - выражение основной сущности человека.
|
|
| |
Нохчи | Дата: Понедельник, 23 Июля 2012, 01:59 | Сообщение # 589 |
заслуженный участник
Сейчас нет на сайте
| Ты говоришь о таймерах которые ставятся функцией SetTimer ?
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Gavolot | Дата: Понедельник, 23 Июля 2012, 02:07 | Сообщение # 590 |
Последователь Тени
Сейчас нет на сайте
| Нохчи, да я пока кроме GetTickCount(); из windows.h нечего еще не пробовал вообще.
Добавлено (23.07.2012, 02:03) --------------------------------------------- Да она и работает как-то странно. Погуглил и нашел какой-то тоже стремноватый вариант впихать какой-то промежуточный цикл между переменными start и end.Добавлено (23.07.2012, 02:07) --------------------------------------------- И только после того как прошел промежуточный цикл, вызывая какую-то функцию, уже потом идет вычисление end-start.
В общем что-то делаю, но пока не пойму ни как :) Тень - выражение основной сущности человека.
Сообщение отредактировал Gavolot - Понедельник, 23 Июля 2012, 02:06 |
|
| |
Нохчи | Дата: Понедельник, 23 Июля 2012, 02:07 | Сообщение # 591 |
заслуженный участник
Сейчас нет на сайте
| Допустим у тебя есть две анимации, которые должны обновляться с разной частотой. Code timer1 = timeGetTime(); timer2 = timeGetTime();
while(true) { if( timeGetTime()-timer1 > 10) { timer1 = timeGetTime(); anim1.update(); }
if( timeGetTime()-timer2 > 25) { timer2 = timeGetTime(); anim2.update(); }
} Очевидно Sleep в данном случае не прокатил бы.
Многие вопросы по Windows отпадут, если посмотреть тут
Сообщение отредактировал Нохчи - Понедельник, 23 Июля 2012, 02:09 |
|
| |
Gavolot | Дата: Понедельник, 23 Июля 2012, 19:53 | Сообщение # 592 |
Последователь Тени
Сейчас нет на сайте
| Нохчи, тфу-ты все я понял)) Добавлено (23.07.2012, 19:53) --------------------------------------------- Вопрос про потоки, самое простое введение я в принципе понял, теперь и копипастить нечего не нужно, на низком уровне все уже нагуглено, ну что для потока открытого с помощью _beginthread нужно чтобы в функции был указатель на void и т.п. тонкости я уже понял и какие параметры у этой команды. Но вот мне интересно, а чтобы сделать к примеру RTS, ну я так гипотетически спрашиваю, нужно получается для каждого юнита потоки делать?
В общем что-то делаю, но пока не пойму ни как :) Тень - выражение основной сущности человека.
|
|
| |
Нохчи | Дата: Понедельник, 23 Июля 2012, 23:18 | Сообщение # 593 |
заслуженный участник
Сейчас нет на сайте
| Нет.
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Gavolot | Дата: Вторник, 24 Июля 2012, 01:04 | Сообщение # 594 |
Последователь Тени
Сейчас нет на сайте
| Так-с, ща вот собераюсь решить в консоли задачу о 8 ферзях, я в принципе уже все в голове продумал. И что примерно делать знаю, но хотелось бы придуманные мною тут функции сделать более универсальными, так вот функция должна принимать как параметр двумерный массив:
Code //Функция заполнения символьного массива void fillArr(char (*arr)[8] ,int y,int x, char element) { //Заполняем массив for(int i = 0; i<y;i++) { for(int j = 0; j<x; j++) { arr[i][j] = element; } } }
Но вот эта char (*arr)[8] меня как-то не устраивает, я хотел бы чтобы функция могла принимать любой указатель на двумерный массив, а не строго только указатель на 8 массивов и как это сделать? Я что только не перепробовал, все выдает ошибку, пока я там не втулю ту цифру которую ему надо.Добавлено (24.07.2012, 01:04) --------------------------------------------- Просто я еще начинающий хотелось бы понять точно)
В общем что-то делаю, но пока не пойму ни как :) Тень - выражение основной сущности человека.
|
|
| |
RUNGOGET2THECHOPAH | Дата: Вторник, 24 Июля 2012, 01:53 | Сообщение # 595 |
участник
Сейчас нет на сайте
| Gavolot, создаешь двумерный массив размера n на m: Code char** arr = new char* [n]; for (int i=0; i<n; i++) arr[i] = new char[m]; И передаешь везде указатель на него - char** arr.
И еще по поводу оператора new: память, выделенная при его использовании, не освобождается при выходе соответствующей переменной из поля видимости, так что как только этот массив тебе становится не нужным, неплохо бы освободить память следующим образом: Code for (int i=0; i<n; i++) delete[] arr[i]; delete[] arr; И вообще, почитай про new/delete на rsdn'е например, не помешает.
Сообщение отредактировал RUNGOGET2THECHOPAH - Вторник, 24 Июля 2012, 02:06 |
|
| |
Gavolot | Дата: Вторник, 24 Июля 2012, 02:11 | Сообщение # 596 |
Последователь Тени
Сейчас нет на сайте
| Ну вот допустим сделал так:
Code :::::
char** pArr = new char* [8];
fillArr(pArr, bY, bX, floor);
::::::
//Функция заполнения символьного массива void fillArr(char** arr,int y,int x, char element) { //Заполняем массив for(int i = 0; i<y;i++) { for(int j = 0; j<x; j++) { arr[i][j] = element; } } }
Оно компилируется, но почему-то ошибку выдает, не пойму почему, вроде же тогда все правильно.Добавлено (24.07.2012, 02:06) --------------------------------------------- ааа стоп =))) Добавлено (24.07.2012, 02:06) --------------------------------------------- Я же вроде забыл адрес массива присвоить, капец я)) Добавлено (24.07.2012, 02:08) --------------------------------------------- Хотя нет, это же я создал новый массив. Добавлено (24.07.2012, 02:11) --------------------------------------------- RUNGOGET2THECHOPAH, та я уже читал, просто двумерный массив не делал еще, так пролистал и забыл блин)) Я кажется понял, я же там еще не выделил память для одномерных массивов, прости не просканировал твое сообщение)
В общем что-то делаю, но пока не пойму ни как :) Тень - выражение основной сущности человека.
Сообщение отредактировал Gavolot - Вторник, 24 Июля 2012, 02:05 |
|
| |
RUNGOGET2THECHOPAH | Дата: Вторник, 24 Июля 2012, 02:13 | Сообщение # 597 |
участник
Сейчас нет на сайте
| Gavolot, ты создал массив указателей, но ни один из этих указателей никуда не указывает. А потом в функции обращаешься в это "никуда", поэтому и ошибка. Посмотри внимательнее мой код - в том цикле после первого new вся соль, а ты его почему-то пропустил.
|
|
| |
Gavolot | Дата: Вторник, 24 Июля 2012, 02:18 | Сообщение # 598 |
Последователь Тени
Сейчас нет на сайте
| RUNGOGET2THECHOPAH, да-да я уже разобрался, я даже вспомнил эту тему в книге)))) Я ее благополучно понял и пропустил без практики) Добавлено (24.07.2012, 02:18) --------------------------------------------- Я просто вспомнил как там говорилось, что сначала объявляется указатель на два измерения, а потом он заполняется одномерными указателями))
В общем что-то делаю, но пока не пойму ни как :) Тень - выражение основной сущности человека.
|
|
| |
ctpz | Дата: Среда, 25 Июля 2012, 09:44 | Сообщение # 599 |
участник
Сейчас нет на сайте
| Quote (Нохчи) timeGetTime() Из какой это библиотеки?
|
|
| |
Нохчи | Дата: Среда, 25 Июля 2012, 09:56 | Сообщение # 600 |
заслуженный участник
Сейчас нет на сайте
| winmm
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
|