Имя:    Пароль:      Помнить меня       
Unsorted   ~  Software  ~  Development and Design  ~  Помощь по С/С++ Все вопросы по С/С++ сюда
На страницу «  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11  »
Doctor_Mozg
Сообщение  21 Ноя 2006, 15:18  Ссылка : Ответить с цитатой
Возраст: 37 Пол: Мужской  Доверенный пользователь
C нами с 25.01.2005
Репутация: 133

Неоспоримым достоинством языка С++ является то, что он является языком одновременно и высокого и низкого уровней, что делает его незаменимым при разработке игр и других сложных и требовательных к производительности приложений.

P.S. Перед задаванием вопросов вроде "Что делает эта функция" настоятельно рекомендуется поизучать MSDN.
P.P.S. В ближайшее время выложу много литературы по этому вопросу.
В начало
Профиль : Фотоальбом : Личное Сообщение : ICQ
chaser
Сообщение  31 Янв 2008, 1:32  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

splav, ладно, придумаешь — расскажешь Улыбочка
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
Selax
Сообщение  01 Фев 2008, 13:55  Ссылка : Ответить с цитатой
Пол: Мужской 
C нами с 06.11.2007
Репутация: 32.5

Дайте плз книг по Borland C++, для создателей игр (начинающих)
В начало
Профиль : Личное Сообщение
Survivor
Сообщение  24 Мар 2008, 16:51  Ссылка : Ответить с цитатой
Возраст: 36 Пол: Мужской  Доверенный пользователь
C нами с 13.03.2006
Репутация: 131.6

Selax, такого не бывает Улыбочка Есть отдельно книги по изучению среды разработки Borland C++, а есть - отдельные книги для разработки игр на С++.

_____________________________
"That is not dead which can eternal lie, and with strange aeons even death may die." H.P.Lovecraft
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : ICQ
Doctor_Mozg
Сообщение  25 Мар 2008, 17:44  Ссылка : Ответить с цитатой
Возраст: 37 Пол: Мужской  Доверенный пользователь
C нами с 25.01.2005
Репутация: 133

Selax, если хочешь писать игры, забывай борланд. Лучше тренируйся на Visual Studio - всё равно на неё рано или поздно переберёшься Улыбочка

З.Ы. Книг кучу я выкладывал в своё время на трекер. Поищи там, правда большинство на английском Улыбочка

_____________________________
Это ты, Джон Уэйн?
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : ICQ
Абсент
Сообщение  31 Мар 2008, 19:07  Ссылка : Ответить с цитатой
Возраст: 34 Пол: Мужской  Доверенный пользователь
C нами с 21.03.2005
Репутация: 130

Цитата:
SetFilePointer(hFile,0x00007560,NULL,0);
WriteFile(hFile,param,lstrlen(param),&szDw,NULL);


как сделать так чтобы передаваемое значение param записывалось в двойном base64?
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : Сайт
AAsad
Сообщение  24 Апр 2008, 17:05  Ссылка : Ответить с цитатой
Возраст: 37 Пол: Мужской  Доверенный пользователь
C нами с 03.04.2006
Репутация: 73.7

Тут проблемка возникла. короче нужно измерить время выполнения одной или несклоьких функций, делаю я это вот таким вот способом
	clock_t perform_time;
	clock_t time;
	time = clock();
	some_funtions();
	perform_time = clock() - time;

Но при этом получаеться что perform_time почти всегда равна 0. А вот если изменить код вот так:
	clock_t perform_time;
	clock_t time;
	time = clock();
	some_funtions();
	while(time == clock());
	perform_time = clock() - time;

то perform_time равняется 15 или 16... Это под windows, под linux(правда там уже не x86, а ia64) тоже самое только там не 16 а что-то похожее 192...
ну и собственно вопрос в том как сделать так чтоб он не перескакивал с 0 до 15, или какой нибуть другой подход к решению этой задачи, притомнужно чтоб это всё работало и под linux...

_____________________________
"Если да, конечно нет" Futurama
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail : JabberID : ICQ
chaser
Сообщение  24 Апр 2008, 18:14  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

Ну ничего удивительного нет, просто функция работает быстро. А время дискретно, да еще и time slice существует, в результате чего получаем такой скачок. Нет смысла мерить время одного вызова такой функции. Стоит либо воспользоваться профайлером (он покажет, сколько всего в течение выполнения программы работала данная функция), либо вызов этой функции повторить N раз в цикле и взять среднее значение.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
mozilla
Сообщение  24 Апр 2008, 18:28  Ссылка : Ответить с цитатой
Пол: Мужской  Доверенный пользователь
C нами с 17.10.2005
Репутация: 253.4

AAsad, разрешающая способность как раз на двухъядернике по-моему 15 мс, т.е. тебе надо использовать другие таймеры...
например timeGetSystemTime...(не пробовал не знаю(подсмотрел в MSDN Весело ), смотри вообщем мультимедийный таймер)

_____________________________
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID : ICQ
Рыся
Сообщение  24 Апр 2008, 19:27  Ссылка : Ответить с цитатой
Пол: Мужской  Доверенный пользователь
C нами с 15.04.2005
Репутация: 133.2

AAsad, дискретность time slice (время переключения планировщиком контекстов задач) у разных ОС разная. К примеру у Windows XP — 16, linux — обычно 10, FreeBSD — обычно 7 и т.п. (обычно — это по умолчанию, потому што у этих ОС их можно и покрутить). Есть вариант использовать инструкцию RDTSC (она вроде непривилегированная) — выдаёт количество тактов прошедших с момента старта процессора (включение питания, сброс), но с мультипроцессорностью есть проблемы. Аналог API Windows QueryPerformanceCounter() (с мультипроцессорностью проблем нет).

В связи с требованием "штобы работало под linux" совет воспользоваться профайлером самый правильный. Однако, в любом случае, при измерении быстродействия каких либо функции, особенно связанных с перелопачиванием памяти нужно делать множество циклов одной и той же операции, дабы учесть эффекты кэширования, предсказания ветвлений и т.п. Иными словами, цикл измерения должен выглядеть вот так:
...
	clock_t perform_time;
	clock_t time;
	time = clock();
	for (int i = 0; i < nRepeats; i ++)
		some_funtions();

	perform_time = clock() - time;
...

nRepeats выбирается экспериментально, чтобы время выполнения было скажем секунду-две, это даст уже приемлимую картину. И, следовательно, усреднённое время выполнения будет perform_time / nRepeats.

_____________________________
Время не существует, у него нет физического носителя в природе. Его выдумал человек, чтобы измерять скорость.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail : JabberID
AAsad
Сообщение  03 Май 2008, 21:41  Ссылка : Ответить с цитатой
Возраст: 37 Пол: Мужской  Доверенный пользователь
C нами с 03.04.2006
Репутация: 73.7

Спасибо за помощь. Правда моя задача не позволяет набрать статистику, с помощью замера нескольких вызовов, но зато я решил эту проблему другим способом, просто в библиотеке которую использовал для паралелизации(MPI), нашёл функцию замера врмени(MPI_Wtime()). Но всё равно спасибо.

_____________________________
"Если да, конечно нет" Futurama
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail : JabberID : ICQ
no_humor_sense
Сообщение  21 Май 2008, 20:06  Ссылка : Ответить с цитатой
Возраст: 48 Пол: Мужской 
C нами с 11.12.2006
Репутация: 54.1

Прошу помощи у тех, кто видел С++ Builder:
Писали мы программку с локализацией на русском и английском, причём стринги читались из INI- файла, и всё шло ладненько, но тут попросили сделать французский вариант. Переводчики прислали нам переведённые INI файлы, но тут Builder упёрся: редкостные французские буквы (вроде Е с чёрточкой или Е с домиком) показывать не желает! Builder был 5-ый, попробовали 6-ой - ещё хуже. Раскладку клавиатуры меняли, да и вообще всё, что нашлось в языковой панели - от силы добились вместо крякозябр общеупотребительной буквы "Е". Отсюда вопрос: как грамотно построить локализацию? Хорошо бы ссылки на титанов борландовской мысли Сарказм
В начало
Профиль : Личное Сообщение
TigerTiger
Сообщение  21 Май 2008, 20:46  Ссылка : Ответить с цитатой
Пол: Мужской 
C нами с 15.04.2008
Репутация: 125.9

Дорогой друг!
Не являясь знатоком Фр. языка, столкнулся с такой же проблемой на Итальянском в 2005 г.

Если не побрезгуете, вот советы.
Не заморачивайтесь автоматизацией, проще сделать всё руками.
INI-файлы => 99% это не Юникод, его лягушатники не любят => определите кодировку, учитывая при этом, что ту, которую рекомендует Майкрософт используют только в Квебеке. У Французов три кодировки, которые к тому же отличаются порядком сортировки. Учтите, что есть ещё Швейцарская и Валонская.
Крайне не советую работать через local_handlers - будете зависеть от настроек Виндоуз тех машин на которых будет исполняться программа.
Проще узнать кодировку, используемую у Ваших Французов, и тупо написать транслитерацию только под нее. Обычный цикл по строке с заменой ex-ASCII-кодов.
Меньше нервов потратите.
В начало
Профиль : Личное Сообщение
no_humor_sense
Сообщение  21 Май 2008, 20:55  Ссылка : Ответить с цитатой
Возраст: 48 Пол: Мужской 
C нами с 11.12.2006
Репутация: 54.1

TigerTiger, вот спасибо, оперативненько! Моя проблемка, конечно, когда-нибудь решится, но в голове возникает общий вопрос: ну ладно мы, как-то перебьёмся, но ОНИ как обходятся??? Хотя вопрос скорее по части философской, нежели программной...
P.S. В Квебеке? Вот это особенно ценно, завтра проверим!
В начало
Профиль : Личное Сообщение
TigerTiger
Сообщение  21 Май 2008, 21:19  Ссылка : Ответить с цитатой
Пол: Мужской 
C нами с 15.04.2008
Репутация: 125.9

Ещё раз прошу учесть, что мы решили эту проблему не для Французского, а для Итальянского, где по сути только 2 кодировки - Итальянская и Швейцарская. Хотя в самом Итальянском алфавите своя тоько 21 буква.
Но у на с тоже вылезали русские буквы "Т,Щ,Ш,О,А".
С последними двумя аккуратней, на вид они не различимы.

Главное помните, что у Borland local-обработка - это как-бы надстройка над ANSI-обработкой Microsoft, со всеми вытекающими последствиями.
В начало
Профиль : Личное Сообщение
Рыся
Сообщение  22 Май 2008, 1:15  Ссылка : Ответить с цитатой
Пол: Мужской  Доверенный пользователь
C нами с 15.04.2005
Репутация: 133.2

1.
Простой способ (которым я пользуюсь чаще всего) использовать строковые ресурсы (вроде как рекомендован MS для локализации).
Пример .rc файла:
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_NEUTRAL
STRINGTABLE 
BEGIN
    IDS_STRING101           "window"
END

LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
STRINGTABLE 
BEGIN
    IDS_STRING101           "fenêtre"
END

Тогда LoadString(..., IDS_STRING101, ...) загружает строку соответствующую текущей локали: французскую для французской, английскую для английских и остальных. Написав несложную обёртку для FindResourceEx()/LockResource() можно указывать конкретную локаль — для переключаемого интерфейса. (К слову заметить — загружает не совсем верное определение, поскольку эти таблицы уже отображены в память при загрузке образа исполняемого файла, LoadString() и т.п. просто выполняют копирование по указателю, а LockResource() позволяет обойтись без лишнего копирования).

2.
Ещё вариант использовать MessageCompiler (mc.exe), но у него несколько иная область применения. Он формирует ресурсы для использования функцией FormatMessage(), которая обычно используется для получения текстового описания ошибки, но никто не запрещает использовать для получения обычных строк по числовому идентификатору.

Пример .mc файла:
MessageIdTypedef=DWORD

LanguageNames=(English=0x409:TNMMSG409)
LanguageNames=(Russian=0x419:TNMMSG419)

FacilityNames=(
  Special000=0x000
)

MessageId=0x00000001
Severity=Error
Facility=Special000
SymbolicName=USBUD_ERR_CRC
Language=English
HC Error: Worng CRC
.
Language=Russian
Ошибка HC: Неверная контрольная сумма
.


3.
Но если вопрос стоит в использовании внешнегого .ini файла, то простой выход, который я вижу — перевести его в юникод и использовать функцию GetPrivateProfileStringW() (и её спутников) для чтения юникодных строк.

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

...
Но если Ваше приложение не Unicode, а ANSI, то мне остаётся только пожелать счастливого траха. Смайлик Конечно, все эти проблемы решаемы и, при ближайшем рассмотрении, я бы даже чего-нибудь посоветовал, но не знаю конкретики, в частности особенностей C++ Builder.

_____________________________
Время не существует, у него нет физического носителя в природе. Его выдумал человек, чтобы измерять скорость.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail : JabberID
Показать сообщения:   
На страницу «  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11  »

Unsorted   ~  Software  ~  Development and Design  ~  Помощь по С/С++

Ответить на тему

Перейти:  





Powered by phpBB   © Unsorted Team  support@unsorted.me  promo@unsorted.me  Полезные скрипты