A.I.M. Jagged Alliance2

Добро пожаловать, Гость. Пожалуйста, выберите:
Вход || Регистрация.
29.03.2024 в 11:36:03

Главная Главная Помощь Помощь Поиск Поиск Участники Участники Вход Вход Регистрация Регистрация
A.I.M. « С++ Вопросы и ответы. »
   A.I.M.
   Генерал
   Ъ и Ь
(Модераторы: Снайпер, Zed, cha)
   С++ Вопросы и ответы.
« Предыдущая Тема | Следующая Тема »
  Тема:  С++ Вопросы и ответы.             Страниц:  1     « Открыть сокрытое! »Прочитано 48831 раз
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #57 от 01.08.2009 в 03:06:32 »

2Artem13:  
Quote:
хиъ2хсщдщк=Кувъофктшх.сщдщкъЖх.иъ

Интересно у тебя получилось :).
Неподскажу потому что не знаю, пользую в первую очередь английские мануалы :). Ещё такой вопрос, тебе гцц под винду нужен? Я им по линухом пользуюсь. Хотя синтаксис командной строки не должен отличатся никак, просто вместо *.а файлов нужно ставить *.либ.
Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: Околокомпухтерный хумор
« Ответ #58 от 10.02.2011 в 00:11:13 »

unsigned short year,month,day;
TDateTime dt = 0;
dt.DecodeDate(&year,&month,&day);
MessageBox(NULL,(IntToStr(day)+"."+IntToStr(month)+"."+IntToStr(year)).c _str(),"",NULL);
 
30.12.1899
Зарегистрирован

ban.gif
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: Околокомпухтерный хумор
« Ответ #59 от 10.02.2011 в 00:39:23 »

2Korchy: Что такое TDateTime? Я не знаю что для него означает 0, у каждого своя имплементация. Может я неточно выразился - не виделя я других точек отсчёта времени для системы кроме 1601 и 1970 годов. Конечно что такие точки я видел в других программах (из того что сходу вспомню, так это класс для презентации времени в БД Firebird, а если точнее в его С++ обёртке IBPP::Date. Там 0 соответствует 31.12.1899, кстати на один день отличается от того что ты привёл.)
Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: Околокомпухтерный хумор
« Ответ #60 от 10.02.2011 в 02:32:15 »

The TDateTime class inherits a val data member declared as a double that holds the date-time value. The integral part of a TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of a TDateTime value is the time of day.
Зарегистрирован

ban.gif
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: Околокомпухтерный хумор
« Ответ #61 от 10.02.2011 в 03:17:09 »

2Korchy: Ага, эти из Делфи. Спс.
Offtop:
Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: Околокомпухтерный хумор
« Ответ #62 от 10.02.2011 в 03:29:21 »

10.02.2011 в 03:17:09, jarni писал(a):
FILETIME (винда)

Это, я так понял, структура для 64 битных систем.
Вообще, сколько я помню, дата хранилась во флоате или дабле. И считалась с 1900 года. Вот с той же msdn http://msdn.microsoft.com/ru-ru/library/82ab7w69.aspx
 
upd: ради любопытства посмотрел стандарт iso, который за даты-время отвечает, не нашел там никаких указаний на то, что считать нулевой датой. Так что можно писать свои функции и они будут на равных с микросовтовскими :)
« Изменён в : 10.02.2011 в 03:50:38 пользователем: Korchy » Зарегистрирован

ban.gif
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: Околокомпухтерный хумор
« Ответ #63 от 10.02.2011 в 03:59:03 »

2Korchy: Ответил в другой ветке, потому что здесь этому обсуждению не место.
 
http://forum.ja2.su/cgi-bin/yabb/YaBB.pl?board=hardnsoft;action=display;...
Зарегистрирован

Don't worry, be happy.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #64 от 10.02.2011 в 03:58:08 »

Этот пост относится к посту из другой темы http://forum.ja2.su/cgi-bin/yabb/YaBB.pl?board=hardnsoft;action=display;...
 
2Korchy:  10.02.2011 в 03:29:21, Korchy писал(a):
Это, я так понял, структура для 64 битных систем.
Нет, это структура ещё со времён Win95, создана для перевода досового времени на более "широкий" тип, хранит информацию о количестве 0,1 мс интервалов прошедших от 1601 года. Именно эту структуру возвращает WIN32 API при запросе на время создания, последнего изменения и чтения файла. Кстати имя её может сбить с толку, она используется ещё во многих местах никак не связаных с файлами, например в WIN32 API функции для получения времени создания процесса, смерти процесса, и времени проведённого процессом в ядре и в юзер-режиме.
 
10.02.2011 в 03:29:21, Korchy писал(a):
Вообще, сколько я помню, дата хранилась во флоате или дабле. И считалась с 1900 года. Вот с той же msdn http://msdn.microsoft.com/ru-ru/library/82ab7w69.aspx
Ну, поскольку я никогда не писал на Делфи, и не использовал даты в МФЦ, то могу сказать что "сколько я помню, подробная дата хранилась в структуре SYSTEMTIME" :). На низком уровне нету классов-обёрток для времени, именно поэтому и используются стартовые даты указанные системой, разработчиками ядра ОС, а не программистами этих самых обёрток. Почему они решили изменить в рамках одной платформы это время для меня остаётся загадкой.
 
З.Ы. SYSTEMTIME я написал не по ошибке, это просто читабельный формат в который переводится FILETIME вызовом WIN32 API FileTimeToSystemTime.
 
Зарегистрирован

Don't worry, be happy.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #65 от 10.02.2011 в 04:07:15 »

2Korchy: 10.02.2011 в 03:29:21, Korchy писал(a):
upd: ради любопытства посмотрел стандарт iso, который за даты-время отвечает, не нашел там никаких указаний на то, что считать нулевой датой. Так что можно писать свои функции и они будут на равных с микросовтовскими
И да и нет. Как я уже говорил, при таком раскладе нельзя передавать время в низкоуровневом виде, тоесть например в виде числа 666. Потому что никому кроме тебя не будет известно что это число означает: 666 секунд от дати 0.0.0000, 666 миллисекунд от 1.1.1601, 666 дней от 23.5.2051. Конечно если это число не выйдет за рамки твоей программы то всё в порядке, но если его нужко передавать третьей стороне которую пишешь не ты, то уже надо договариватся о формате, тоесть хотя бы сказать что это число типа FILETIME или типа int для класса TDateTime. В последнем случае надо быть уверенным что получатель тоже использует TDateTime, потому что если нет то ему придётся писать собственную обёртку для перевода этого числа в читабельный формат или хотя бы в системный формат FILETIME, который в рамках всей линейки Вин означает одно и тоже и доступен всем кто использует WIN32 API.
Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++
« Ответ #66 от 10.02.2011 в 04:35:09 »

10.02.2011 в 03:58:08, jarni писал(a):
Нет, это структура ещё со времён Win95

Угу, понял. Когда вбил в поиске, первым мне выскочил именно 64 битный вариант.
 
 10.02.2011 в 03:58:08, jarni писал(a):
Ну, поскольку я никогда не писал на Делфи, и не использовал даты в МФЦ,
 
но если его нужко передавать третьей стороне которую пишешь не ты, то уже надо договариватся о формате

А мне с Win API и соответственно с systemtyme не доводилось сталкиваться. Получается так как я и говорил - без четкого указания в стандарте каждый воротит как хочет :)
Зарегистрирован

ban.gif
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #67 от 10.02.2011 в 04:40:16 »

2Korchy:  10.02.2011 в 04:35:09, Korchy писал(a):
без четкого указания в стандарте каждый воротит как хочет
И к сожалению это создаёт кучу геморроя писателям кросплатформенного кода. :(
Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #68 от 28.02.2011 в 23:32:30 »

Народ, кто с Билдером/Дельфями знаком, подскажите:
Есть там компонент ListVeiw - как (и можно ли) поменять цвет шрифта одной строки? Стиль vsReport.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++
« Ответ #69 от 01.03.2011 в 05:08:27 »

28.02.2011 в 23:32:30, Artem13 писал(a):
как (и можно ли) поменять цвет шрифта одной строки

Сам с таким не сталкивался, но вроде бы подобное нужно делать самому через перерисовку в OnPaint
 
upd:
Да, точно в OnDrawItem
Sender.Canvas.Font.Color = xxx;
« Изменён в : 01.03.2011 в 05:15:56 пользователем: Korchy » Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #70 от 01.03.2011 в 19:33:24 »

2Korchy: сенькс, попробую.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #71 от 22.03.2011 в 22:48:53 »

Еще вопрос - мну заклинило, никак не могу вспомнить, какая функция обрабатывает запросы окна. Конкретно задача - во время длительного цикла обрабатывать сообщения окна (без использования второго потока).
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #72 от 22.03.2011 в 22:55:42 »

2Artem13:  
Code:
     // Main message loop:
      while (GetMessage(&msg, NULL, 0, 0))
      {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                  TranslateMessage(&msg);
                  DispatchMessage(&msg);
            }
      }
.
.
.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 int wmId, wmEvent;
 PAINTSTRUCT ps;
 HDC hdc;
 
 switch (message)
 {
 case WM_COMMAND:
  wmId    = LOWORD(wParam);
  wmEvent = HIWORD(wParam);
  // Parse the menu selections:
  switch (wmId)
  {
  case IDM_ABOUT:
   DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
   break;
  case IDM_EXIT:
   DestroyWindow(hWnd);
   break;
  default:
   return DefWindowProc(hWnd, message, wParam, lParam);
  }
  break;
 case WM_PAINT:
  hdc = BeginPaint(hWnd, &ps);
  // TODO: Add any drawing code here...
  EndPaint(hWnd, &ps);
  break;
 case WM_DESTROY:
  PostQuitMessage(0);
  break;
 default:
  return DefWindowProc(hWnd, message, wParam, lParam);
 }
 return 0;
}
.
.
.
« Изменён в : 22.03.2011 в 23:04:50 пользователем: jarni » Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #73 от 22.03.2011 в 23:00:06 »

2jarni: Да нет вроде. До этих я додумался, но им надо какие то параметры передавать и прочая фигня. Там что то типа дефолтной обработки ... Мне нужно просто окно перерисовывать регулярно, т.к. там вывод лога идёт...
ЗЫ Да, я всё Билдер мучаю :)
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #74 от 22.03.2011 в 23:09:44 »

2Artem13: Обновил свой пост. В приведённой оконной функции есть case WM_PAINT где тебе и надо будет рисовать. Если в билдере оно работает иначе, то не знаю.
 
Может опишешь проблему поподробнее. Ты говоришь о длительном цикле. Где обрабатывается этот цикл? Если у тебя оконная программа то в приципе запуск этого цикла происходит как раз в обработке оконного сообщения, например в обработке кнопки. Если это так, то цикл заблокирован и тебе надо запускать по сути новый (временный) который заменит тот который ты заблокировал (поэтому лучше делать свои цикли в отдельных потоках). Ну или може просто вызываей функцию DoPaint() своего окна или что-то подобное раз за итерацию своего цикла.
Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #75 от 22.03.2011 в 23:22:13 »

2jarni: Ты приводишь варианты для чистого АПИ. Это я могу реализовать, но не хочется городить. Да, там долгий цикл в обработчике кнопика. Вернее большие траты на ожидание. Их можно оформить циклами и в начале каждого цикла обрабатывать сообщения в очереди. Но вот вроде была простая конструкция в Билдере для этого, но мну заклинило намертво :(
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #76 от 22.03.2011 в 23:28:38 »

2Artem13: Может что-то вроде Application.ProcessMessages() ?
Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #77 от 22.03.2011 в 23:30:22 »

2jarni: О! Вот это кажется оно, сенькс, пошёл пробовать.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #78 от 03.09.2011 в 01:11:20 »

Ребята, снова пара вопросов:
1. винда. Как получить инфу о системе. Конкретно интересует наличие и названия СОМ-портов.
2. Есть переменная типа байт (BYTE, он же unsigned char). Нужно запихнутое туда число превратить в знаковое. Простое прямое приведение типов, ессно, не работает.
« Изменён в : 03.09.2011 в 01:11:57 пользователем: Artem13 » Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++
« Ответ #79 от 03.09.2011 в 01:24:14 »

2Artem13:  
1. QueryDosDevice
 
2. Что значит превратить в знаковое? Если ты уже запихнул знаковое число в беззнаковый тип, информация о знаке утрачена т.к. байт отводимый под знак занят частью самого числа.
Зарегистрирован

ban.gif
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #80 от 03.09.2011 в 01:30:50 »

2Artem13:  
1. SetupDiEnumDeviceInfo с нужными параметрами. GUID вроде GUID_CLASS_COMPORT. Вобщем гугли в этим направлении, потому что способ CreateFile( "\\\\.\\COM01"...) не совсем хороший.
2. Как так не работает? Если у тебя в байте 0xFF, то приведя его в знаковый вид ты получишь -1.
Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #81 от 03.09.2011 в 03:45:52 »

2Korchy: Да нет, не утрачена. Просто интерпретируется по-другому.
2jarni: а, это я ступил, наверное. Байт привёл к шорту. А там жеж длина другая со всеми вытекающими. Попробую сначала в чар перевести, сенькс.
 
2jarni:  03.09.2011 в 01:30:50, jarni писал(a):
CreateFile( "\\\\.\\COM01"...) не совсем хороший.

Я использую CreateFile( "COM1", ...) :) Проблем не замечено вплоть до Висты.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++
« Ответ #82 от 03.09.2011 в 05:42:14 »

03.09.2011 в 03:45:52, Artem13 писал(a):
Да нет, не утрачена. Просто интерпретируется по-другому.  

Да, я немного неправильно написал, если записать и сразу считать оттуда же, будет сохранена. Стоит сделать любую операцию - будет утрачена.
Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #83 от 06.10.2011 в 22:19:09 »

Такой ситуёвина - есть прога на С++ и есть Флеш-прога (Айр, вероятнее всего). Необходимо регулярный (2 раза в секнду) обмен небольшим массивом данных. Программист флеш предлагает через текстовый (тхт, xml) файл. Однако я боюсь стандартными Сишными способами работы с файлами могут возникнуть конфликты доступа. Посоветуйте, как лучше всего это дело организовать.
ЗЫ Если есть способ встроить флеш в С-программу, вообще шикарно было бы :)
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++
« Ответ #84 от 07.10.2011 в 04:26:53 »

2Artem13:  
А банальные сокеты программист флеша не предлагает? И флеш и с++ поддерживают подключение через сокеты - самый прежде всего напрашивающийся вариант.
Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #85 от 07.10.2011 в 05:05:34 »

2Korchy: нет :(
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++
« Ответ #86 от 07.10.2011 в 06:01:08 »

07.10.2011 в 05:05:34, Artem13 писал(a):
нет

"Нет" что? Программист флеша не может это реализовать? Флешка не меняется?
Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #87 от 07.10.2011 в 06:07:58 »

2Korchy: не предлагал. Да и я сокетами не владею - не было надобности.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++
« Ответ #88 от 07.10.2011 в 06:19:31 »

2Artem13:  
 
Да с сокетами просто все, особых заморочек нет. Для того, что ты написал это самый простой и логичный путь. Встроить флеш в приложение в принципе наверное можно, но я не уверен, что это даст решение проблемы т.к. встраивать ты будешь не саму флешку а флеш-плеер в котором флешка будет проигрываться, т.е. промежуточную виртуальную машину и проблема передачи данных сквозь нее останется, плюс у флеша куча заморочек с безопасностью доступа, которые тоже надо будет порешать. Может есть что-то, чего я не знаю, но ситуация видится мне так. А вообще, кому нужны данные? Флешке или проге?
Зарегистрирован

ban.gif
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #89 от 07.10.2011 в 06:46:36 »

2Artem13: С такой частотой обмена данными через файл лучше не делать. Доступ к файловой системе довольно медленный, будут постоянные простои. Если данными обмениваться только в одном направлении Флеш->С, то всё-таки можно пробовать, поскольку запрет на совместное использование файла на Вин/Лин работает вполне нормально, а на С можно спокойно делать поток для "опроса" файла. В обратном направлении будут проблемы если флеш не поддерживает потоки. В общем, геморрой тот ещё будет.  
 
Так что учи сокеты, благо со стороны С на это пойдёт отсилы день, и заставляй Флешера делать тоже самое.
Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++
« Ответ #90 от 07.10.2011 в 07:05:49 »

Флеш естественно потоки не поддерживает. Но и для файл-обмена интервал в 2 минуты вполне достаточный. Вообще варианты есть, можно через базу данных например менять. Все зависит от задачи. Но сокеты наиболее универсальный и простой вариант.
 
upd. перечитал вопрос - 2 раза в секунду а не в минуту! Тогда только сокеты других вариантов не будет.
« Изменён в : 07.10.2011 в 07:08:28 пользователем: Korchy » Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #91 от 07.10.2011 в 16:21:08 »

Нет, там основной поток как раз наоборот, С->Флеш.
Ладно, провентилирую насчет сокетов, но что то мне подсказывает, что врядли :(
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #92 от 07.10.2011 в 19:39:55 »

2Artem13: Если сокеты не удастся продвинуть, тогда можно и через файл.
Способ 1: Создаёшь простой протокол: в файле первым байтом идентификатор направления потока данных. Дальше 4 байта временная метка. Дальше данные. Тот кому нужен доступ для файла открывает его на запись и чтение но без шеринга, абсолютно. Это для того чтобы при конкурентном доступе процесс ждал пока тот другой процесс закончит свою операцию.  
 
Дальше работа для обоих одинкова.  
Раз в пол секунды процессу нужно что-то прочитать, он открывает файл и смотрит на первый байт. Если там его идентификатор значит там данные для него. Дальше он смотрит на метку. Если она отличается от предыдущей, то значит в файле новые данные, можно читать. Если же метка не поменялась, то данные от последнего чтения не менялись. Закрывает файл.  
Если надо записать в файл, то открываем, пишем в первый байт идентификатор для того другого, пишем новую метку, пишем данные.
Вполне возможно что когда откроешь файл для записи, то там будут новые данные для чтения. От логики твоей программы зависит если ты эти новые данные проигнорируешь или сначала их прочитаешь а потом уже будеш писать свои.
 
Способ 2: В файле выделяешь фиксированную часть для одного процесса, и такую же для второго. Первый скажем читает данные с оффсета 0, пишет с оффсета 512, второй наоборот, пишет с оффсета 0, читает с оффсета 512. В таком виде отпадает надобность иметь идентификатор направления. Остаётся только метка. Обработка проще. Открыл, посмотрел нет ли чего новенького на оффсете для чтения, записал свои данные на оффсет для записи.
 
В случае если файл открыт другим процессом, повторять попытку его открыть раз в 50-100 мс. Не знаю правда одного нюанса. Если будет использоватся винчестер то там есть кеш. Если все операции будут проводится в кеше то быстродействие может быть вполне нормальное. ОСь после закрытия файла далеко не всегда сразу переливает его из кеша на сам диск. Если всё-таки после закрытия файл будет всегда сливаться на диск, то лампочка работы с диском у тебя не потухнет, вероятность убить диск будет возрастать в каждым часом проработанном в таком режиме. Также надеюсь это всё не будет проходить на флешке, имею ввиду флеш-диск. За каких-то 10 минут ты убёшь сектор который станет нечитабельным. Из последнего думаю понятно что может таки лучше попробовать сокеты.
Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #93 от 07.10.2011 в 23:41:31 »

2jarni: Сенькс, если что попробую. Пока вроде наметился прогресс в сокетах. во всяком случае программист сообщила, что знакома с данной технологией.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #94 от 10.10.2011 в 20:29:16 »

2Korchy: 2jarni: Други, в двух словах о сокетах - возможно ли применения на локальном компе и как?
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #95 от 10.10.2011 в 20:35:21 »

2Artem13: Конечно. Для этого существует так званый loopback ip-адрес: 127.0.0.1.
 
Сервер создаёт сокет, байндит его на адрес и порт, 127.0.0.1:55555. Сервер будет принимать исключительно локальное соединение на одном компе.
 
Клиент коннектиться прямо на адрес и порт: 127.0.0.1:55555.
« Изменён в : 10.10.2011 в 20:36:58 пользователем: jarni » Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++
« Ответ #96 от 10.10.2011 в 23:42:48 »

Ярни все верно написал.
Не указал разве что 127.0.0.1 называется localhost и порты лучше выбирать начиная с 255, до 255 почти все отведены под какой-нибудь системный процесс.
Зарегистрирован

ban.gif
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #97 от 10.10.2011 в 23:46:54 »

2Korchy: Ну да, про алиас забыл. А порты вроде лучше выбирать из 49152–65535, поскольку они не могут быть зарегистрированы IANA. Взяв что-то ниже можно нарваться на уже используемый какой-то програмулиной или сервисом порт.
Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++
« Ответ #98 от 11.10.2011 в 00:24:25 »

10.10.2011 в 23:46:54, jarni писал(a):
Ну да, про алиас забыл. А порты вроде лучше выбирать из 49152–65535, поскольку они не могут быть зарегистрированы IANA. Взяв что-то ниже можно нарваться на уже используемый какой-то програмулиной или сервисом порт.  

Да это уже без разницы. Идентификацию своих данный все равно по-хорошему нужно делать, никогда нет стопроцентной уверенности что еще кто-нибудь по чистой случайности не возьмет выбранный порт. А так можно хоть 80й интернетовский брать. Просто больше ожидание и отсеивать кучу чужих пакетов придется.
Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #99 от 11.10.2011 в 00:39:15 »

2Korchy: В Билдере есть два компонента - их достаточно будет, или необходимо еще какие-то шаманства проделать?
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++
« Ответ #100 от 11.10.2011 в 00:43:01 »

11.10.2011 в 00:39:15, Artem13 писал(a):
В Билдере есть два компонента

В Борландовском? Я же не знаю задачи. Для простой передачи пакетов данных, типа чата - вполне.
Только учти что флеш использует только неблокируемые сокеты. Тебе скорее всего нужно будет использовать их же.
Зарегистрирован

ban.gif
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++
« Ответ #101 от 11.10.2011 в 01:06:14 »

11.10.2011 в 00:43:01, Korchy писал(a):
скорее всего нужно будет использовать их же
Если это не нужно самой программе, то в этом нету необходимости. В смысле, одну сторону соединения можно обрабатывать синхронным способом, другую асинхронным совершенно спокойно.
Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++
« Ответ #102 от 11.10.2011 в 02:14:26 »

11.10.2011 в 01:06:14, jarni писал(a):
Если это не нужно самой программе, то в этом нету необходимости. В смысле, одну сторону соединения можно обрабатывать синхронным способом, другую асинхронным совершенно спокойно.

Вообще, да, ты прав.
Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #103 от 11.10.2011 в 02:53:09 »

2jarni: 2Korchy:  Спасибо, буду изучать :)
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++
« Ответ #104 от 01.11.2011 в 23:04:14 »

Продолжаем тему :)
Собсно, как то я с флэшкой взаимодействую. Теперь другой задача - как мне этот сторонний экзешник запустить/закрыть? Запустить я могу через ShellExecute, но тогда как останавливать. С другой стороны, вроде CreateProcess позволяет запустить внешний ехе и получить его хэндл дабы потом с ним манипулировать; однако вопрос - что будет с этим хэндлом, если внешний ехе закроется собственными средствами без моего вмешательства? Я об этом узнаю?
А може кто еще какие методы поскажет?
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #105 от 01.11.2011 в 23:33:14 »

2Artem13: CreateProcess это твое всё. :)
 
        STARTUPINFO      si = {0};
      PROCESS_INFORMATION pi = {0};
      si.cb = sizeof(si);
      if( CreateProcess(  
            "Имя экзешника",  
            "Аргументы",
            NULL,
            NULL,
                FALSE,
                0,
            "Переменные среды если надо",
            "Рабочая директория если надо поменять",
            &si,
            &pi <-- вот это тебе как раз и нужно) )
      {
            //m_hProcess = pi.hProcess;
            //m_pid                   = pi.dwProcessId;
 
//Вот так надо следить за процессом. Именно так ты узнаешь если процесс умер. Wait вывалится как раз в момент смерти. Хендл потом обязательно закрыть иначе будет хендл-лик у процесса (у винды ограничение на 16 млн хендлов но и это число мне однажды удалось достичь из-за утечки).
if( WAIT_OBJECT_0 == ::WaitForSingleObject(pi.hProcess, INFINITE) )
      {
                //Процесс больше не жилец
                //Eсли надо узнать с каким кодом процесс умер то делается это так
            DWORD dwExitCode;
            if( GetExitCodeProcess(m_hProcess, &dwExitCode) )
            {
                    //dwExitCode это та цифра с которой процесс вышел из main().
            }
      }
      }
« Изменён в : 01.11.2011 в 23:35:49 пользователем: jarni » Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #106 от 02.11.2011 в 00:40:33 »

2jarni: сенькс. Мне за ним следить особо не надо, но я должен его убить при собственном закрытии, а закрытие уже убитого процесса в винде, емнип, приведёт к крашу.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #107 от 02.11.2011 в 00:46:35 »

2Artem13: TerminateProcess не крешится, просто возвратит FALSE.
Зарегистрирован

Don't worry, be happy.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #108 от 02.11.2011 в 00:53:25 »

А GetLastError в даннов случае возвращает ERROR_INVALID_HANDLE. Только что проверено.
Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #109 от 02.11.2011 в 03:19:36 »

2jarni: Сенькс. Завтра попробую у себя.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #110 от 03.11.2011 в 00:22:20 »

2jarni: Что я делаю не так? Срабатывает только со второго раза и процесс  не терминатится :(
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #111 от 03.11.2011 в 00:24:19 »

А на что ругается первый раз?
Зарегистрирован

Don't worry, be happy.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #112 от 03.11.2011 в 00:52:37 »

Вот такой вот код
Code:

int main( int argc, char * argv[] )
{
  STARTUPINFO si = {0};
  PROCESS_INFORMATION pi = {0};
  si.cb = sizeof(si);
 
  if( !CreateProcess( "app.exe", NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, 0, &si,&pi) )
  {
    printf("Failed to create.\n" );
    return -1;
  }
 
  printf("Created.\n");
  if ( WaitForSingleObject( pi.hProcess, 10000 ) != WAIT_TIMEOUT )
  {
    printf("Dead :-(.\n");
    return -2;
  }
 
  printf("Alive.\n");
  UINT exit_code = 0xBAADF00D;
  if ( !TerminateProcess( pi.hProcess, exit_code ) )
  {
    printf("Failed to Terminate.\n" );
    return -3;
  }
 
  printf("Terminated.\n");
  if ( WaitForSingleObject( pi.hProcess, 10000 ) != WAIT_OBJECT_0 )
  {
    printf("Handle is not set.\n" );
    return -4;
  }
   
  printf("Dead :-).\n");
  DWORD dwExitCode = 0;
  if ( GetExitCodeProcess( pi.hProcess, &dwExitCode) )
  {
    printf("Terminated with ec: %x.\n", dwExitCode );
  }
  else
  {
    printf("Failed to get ec.\n" );
  }
 
  return 0;
}

 
у меня работает с вот таким результатом
Quote:

Created.
Alive.
Terminated.
Dead :-).
Terminated with ec: baadf00d.

 
app.exe это однострочная програмка
Code:

int main( int argc, char * argv[] )
{
  Sleep(3600000);
  return 0;
}

Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #113 от 03.11.2011 в 03:40:58 »

03.11.2011 в 00:24:19, jarni писал(a):
А на что ругается первый раз?

ХЗ, я не смотрел еще, на скорую руку нарисовал, код ошибки не смотрел.
 
А в терминатор я код передавал 0. Я уже не помню какой там код нормального завершения должен быть.
 
Кстате, CloseHandle после терминатора не нужен?
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #114 от 03.11.2011 в 03:44:59 »

2Artem13:  03.11.2011 в 03:40:58, Artem13 писал(a):
Я уже не помню какой там код нормального завершения должен быть
А он у всех свой, но общепринятое - 0. Хотя встречал проги которые успешное завершение обозначают как 1, как аналог TRUE.
 
 03.11.2011 в 03:40:58, Artem13 писал(a):
Кстате, CloseHandle после терминатора не нужен?  
Надо. Забыл, опять забыл. (с) :)
Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #115 от 22.02.2012 в 01:13:40 »

Я чего то опять туплю - давно не работал с контейнерами и не могу сообразить. Есть ли в С++/STL/ещё где-нибудь контейнер или алгоритм, позволяющий прямую и обратную выборку? Т.е. значение по ключу и ключ по значению. В принципе, размер небольшой и можно тупо два массива сварганизовать, но хочется изящно поизвращаться  :D
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #116 от 22.02.2012 в 01:25:36 »

2Artem13: НЯЗ в STL таких контейнеров нету. Но нужную тебе функциональность предоставляет любой STL контейнер с поиском по ключу + функция std::find. Только учти что у последней сложность O(n).
« Изменён в : 22.02.2012 в 01:26:18 пользователем: jarni » Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #117 от 22.02.2012 в 01:56:01 »

2Artem13:  
22.02.2012 в 01:13:40, Artem13 писал(a):
Есть ли в С++/STL/ещё где-нибудь контейнер или алгоритм, позволяющий прямую и обратную выборку?

std::map смотри. Поиск значения по ключу есть, поиск ключа по значению - циклом. На основе map'a сделан boost::multi_index, там вроде реализован и прямой и обратный поиск. Но если без буста, то через мап.
Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #118 от 22.02.2012 в 03:46:20 »

Спасибо, так и думал. Поизвращаюсь и так и эдак, наверное.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #119 от 29.09.2012 в 01:00:50 »

Имею такой кусок кода:
 
Code:
const int lattice_size=50;
const int max_ncltd=30000;
int *lattice1;
 
...
 
lattice1=(int*)malloc(lattice_size*lattice_size*lattice_size*(max_ncltd+1)*sizeof(int));

 
При компиляции на последней приведенной строке выдается предупреждение: "warning C4307: '*' : integral constant overflow". Почему оно так и что сделать, чтоб его не было?
(интуитивно подозреваю, что проблема в размере этой переменной, которая состоит из 4е9 интов, но хотелось бы конкретнее...)
 
А, да: система Win7 32.
« Изменён в : 29.09.2012 в 01:02:16 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #120 от 29.09.2012 в 03:50:26 »

2Ushwood:  
Потому что latticel объявлено как указатель на int. int имеет хранимый объем 4 байта. Выделяя память под массив в последней строчке ты выделяешь столько, что превосходишь максимальное число влезающее в 4 байта (-2^16 - 2^16).
Легко проверить, тоже самое предупреждение ты получишь при такой строке:
int a = INT_MAX+1;
 
Самое простое решение - переопредели *latticel на тип double (8 байт -2^32 - 2^32). Т.е. так:
 
double *latticel;
...
latticel = (double*)malloc( ... *sizeof(double));
Зарегистрирован

ban.gif
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #121 от 29.09.2012 в 06:50:27 »

2Korchy: Спасибо, попробую сделать так...
 
ммм, однако мне там удобнее работать с интами, чем с даблами... ладно, ченить придумаю.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #122 от 29.09.2012 в 07:00:11 »

2Ushwood: Использование другого типа тебе не поможет в данном конкретном случае. А то что посоветовал Никита так вообще. У тебя ведь не проблема в переменной для данных а в размере поля для этих данных. Если бы позволяла система то вполне хватило бы вместо const int использовать const unsigned long long, он 64битный беззнаковый, туда влезет очень много. Но система в твоём случае не позволяет. Ты хочешь создать ~15Гб, но на 32битной системе у тебя теоретических 4Гб, а фактических около 2Гб ну или 3Гб если использовать дополнительную опцию в настройках Винды.
« Изменён в : 29.09.2012 в 07:07:19 пользователем: jarni » Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #123 от 29.09.2012 в 09:15:51 »

2jarni:  
Проблема, насколько я понимаю, в том, что размер массива вылезает за адресацию int. Соот-но использование long или double без разницы, должно помочь. Я не задумывался, но разве в 32битной системе нельзя выделить память больше 2 гб? По идее система должна занять сколько сможет оперативки, а остальное начнет хешировать на диск.
Зарегистрирован

ban.gif
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #124 от 29.09.2012 в 10:10:29 »

2Ushwood:  
Так работай с интами. Указатель должен быть большим, а не размер ячейки массива.
И да, Юра прав, используй long. Я забыл, что double это плавающая точка, он не хранит точных значений.
Так тогда получится:
 
long *lattice1;  
lattice1=(long*)malloc(lattice_size*lattice_size*lattice_size*(max_ncltd +1)*sizeof(int));
Зарегистрирован

ban.gif
Zed
[SIG edition ;)]
A.I.M.Director

Была такая игра Z


Ё-мэйл

Пол:
Репутация: +532
Re: С++ Вопросы и ответы.
« Ответ #125 от 29.09.2012 в 10:19:47 »

29.09.2012 в 09:15:51, Korchy писал(a):
не задумывался, но разве в 32битной системе нельзя выделить память больше 2 гб?
 
Можно, но не винде.
29.09.2012 в 09:15:51, Korchy писал(a):
По идее система должна занять сколько сможет оперативки, а остальное начнет хешировать на диск.  

А обращаться к памяти ты будешь через духов машины ? адресация то 32 битная.
Зарегистрирован

Кровавый ГБист, душитель свободы.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #126 от 29.09.2012 в 10:22:29 »

2Korchy: Ты предложил заменить элементы int на double. Это точно не решает проблему потому что double элементов всё равно будешь создавать int штук. Поэтому я предложил оставить элементы int но количество штук заменить на 64битную величину.
 
Но это всё так сказать - фигня. Самая главная проблема состоит в адресном пространстве. Если ты создашь массив из 4е9 int'ов, то адрес первого будет, чисто теоретически, 0х00000000, адрес второго 0х00000004. С адресом 0хFFFFFFFC будет всего лишь 1073741823 элемент массива. И всё. То есть, из 4е9 элементов адресовать ты можешь только 1е9. Ну, можно конечно задать индекс 2000000000, но я не знаю что случиться первым, Segmentation Fault или перетечение адреса и соответственно адресация неправильного участка памяти. Уж лучше то первое.
 
АПДЕЙТ:
Никита, ты путаешь яблоки с грушами. long *lattice1;  это указатель на массив элементов типа long. Юре не нужен этот тип, ему нужны int'ы, к тому же на 32битной платформе у них одинаковый размер. Ему нужно увеличивать константы так как я писал. Тут вот в чём дело, компилятор имеет ряд вполне чётких правил преобразования типов.
lattice_size*lattice_size*lattice_size*(max_ncltd +1)*sizeof(int) это int*int*int*int*size_t.
50*50*50 - всё в порядке. Результат int
125000 * 30001 = 3750125000. Перетечение знакового типа, результат -544842296.
-544842296 * 4: -544842296 переводится в size_t потому что этот тип больше, 3750125000 * 4 = 2115598112. Перетечение, неверный результат. Поэтому нужен тип больше.
 
АПДЕЙТ2:
На первый взгляд может показаться что я написал тавтологию, 3750125000 --> -544842296 --> 3750125000. Но это тавтология только на 32битной платформе. Если оставить те же типы но скомпилировать код на 64 битной платформе то результат будет немного другим.
int на 64битах остаётся 32битным.
sizeof(int) возвращает значение типа size_t, которое на 64битной платформе имеет 64бита. Значит так. Первые 4 умножения происходят в рамках int с результатом -544842296. В хексе это 0хDF865DC8. Проблемка только в том что по правилам компилятора расширение типов происходит так: int --> int64 --> uint64, а это значит 0хDF865DC8 (int) --> 0xFFFFFFFFDF865DC8 (int64) --> 0xFFFFFFFFDF865DC8 (uint64). Последнее число в десятичной форме уже 18446744073164710000. Много, да. Потом ещё умножить на 4. Значение опять перетечёт, получится 0хFFFFFFFF7E197720, в дека 18446744071530183000. Не забываем что теперь это уже беззнаковое. Вот именно это число полезет в malloc (интерфейс void * malloc(size_t) ). Хех, столько памяти позволит аллоцировать разве что супер-пупер-мега кластер с дистрибуированной ОС, например IBM BlueGene.
« Изменён в : 29.09.2012 в 10:52:49 пользователем: jarni » Зарегистрирован

Don't worry, be happy.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #127 от 29.09.2012 в 10:44:29 »

2Ushwood: Юр, если нету возможности портировать программу на 64битную платформу предлагаю разбить проблему на меньшие части и делать её по частям, "подсасывая" в нужный момент нужную часть. Например, если ты читаешь данные из файла, то создай массив размером в 1 млн. int'ов и залей в него первый миллион из файла. После обработки этого, залей второй на то же место и так победного конца. ;)
Зарегистрирован

Don't worry, be happy.
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #128 от 29.09.2012 в 11:06:11 »

2Korchy: 2jarni:  
Благодарю за советы. Осмыслив информацию, я понял, что мне нужно сделать ход конем. Осталось разобраться, что это за конь и как он должен ходить...
 
В общем, задача (точнее, подзадача), которую мне нужно решить, следующая.
 
У меня есть n точек в трехмерном пространстве, координаты которых мне задаются. Число n большое - порядка 1е6, но проблема не в них.
Пространство поделено кубической решеткой на m x m x m ячеек. Заранее известно, что в каждой ячейке может быть не больше n0 точек (n0=30000). Сколько именно точек окажется в какой ячейке - заранее неизвестно (я это узнаю, когда получаю координаты точек).
Задача: по номеру (i,j,k) кубической ячейки получить доступ ко всем точкам, которые в этой ячейке есть. Задачу надо решать много раз, поэтому вариант перебирать каждый раз все n точек сразу отметается.
 
Сперва у меня было m=25, и я решил задачу просто: сперва создал линейный массив (размером n) структур, где прописаны координаты каждой точки, потом создал массив int lattice[m][m][m][n0+1] и заполнил его: для каждого (i,j,k) я в ячейку [i][j][k][0] вписал количество точек в этой ячейке, а дальше - номера этих точек. Все было нормально, на машине с 4 гигами оперативки все работало.
 
Дальше понадобилось увеличить m как минимум до 50 (на самом деле - хорошо бы до 100), и начались проблемы. Компилить массив lattice[m][m][m][n0+1] Си просто отказался, когда я попытался обойти это дело с помощью указателей - выдал то, что я написал выше.
 
Теперь, собсно, свежие мысли. Реально ведь в этом массиве подавляющее большинство ячеек будут просто забиты нулями - ужасающе неэффективный расход памяти. Нельзя ли в каждой из этих 50х50х50 ячеек выделять объем не под максимальные 30000 точек, а индивидуально, под то количество точек, которые реально в эту ячейку попали? Чувствую, тут нужна какая-то химия врое массива указателей, но я в этой области плаваю...: idontknow :
« Изменён в : 29.09.2012 в 11:10:32 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #129 от 29.09.2012 в 17:55:25 »

2jarni:  
Я предлагал менять не размер элементов а размер указателя на массив. Плохо наверное написал. И видимо да, с наскоку так просто проблему с адресацией не решить.
 
upd:
В любом случае не понимаю, почему нельзя сделать свой указатель, если системных не хватает. Что-то вроде
 
Определить массив
 
int BigArray[INT_MAX][INT_MAX];
 
И переопределить указатель:
 
int & operator [] (long id) const {
int FirstWord = id/INT_MAX;
int LastWord = id%INT_MAX;
return BigArray[FirstWord][LastWord];
}
« Изменён в : 29.09.2012 в 19:16:29 пользователем: Korchy » Зарегистрирован

ban.gif
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #130 от 29.09.2012 в 18:07:11 »

29.09.2012 в 11:06:11, Ushwood писал(a):
В общем, задача (точнее, подзадача), которую мне нужно решить, следующая.  

Опять же решение с наскока: по точкам строить дерево. Для твоей задачи скорее всего Octree.
Зарегистрирован

ban.gif
Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #131 от 29.09.2012 в 18:30:20 »

2Ushwood: Можно мнение новичка?
 
Точки в процессе двигаются? Доступ нужен ко всем сразу или только к определённой части?
 
Если точки неподвижны и доступ нужен только к части из них, можно разделить все точки по полоскам m*m*5, например, и записывать на диск. Как в звёздном каталоге никто не держит информацию о миллиарде звёзд в одном файле.
 
 29.09.2012 в 11:06:11, Ushwood писал(a):
Нельзя ли в каждой из этих 50х50х50 ячеек выделять объем не под максимальные 30000 точек, а индивидуально, под то количество точек, которые реально в эту ячейку попали?
Думаю можно. При считывании точек на каждую ячейку пространства заводим счётчик cnt<n0 и указатель на первый элемент, лежащий в ячейке, который представляет структуру: элемент, указатель на следующий.
 
Считав точки, чтобы не возиться со списками в таком виде, переделываем структуру данных, делаем массив
m*m*m, каждый элемент которого является структурой данных вида: количество точек в этой ячейке (мы их уже сосчитали на предыдущем шаге), динамический массив из количества точек. (Или указатель на массив из количества точек плюс один, где в нулевой позиции хранится кол-во точек).
 
Если работать с этим потом долго, то подготовка может дать свои плюсы, тем более что второй этап должен неплохо параллелится.
 
При этом, чтоб меньше возиться с указателями, можно попробовать массив [m][m][m] заменить на линейный массив [m*m*m] - миллион указателей, должно влезть. Индексы обрабатывать вручную, работать может быстрее цепочек указателей.
« Изменён в : 29.09.2012 в 19:27:26 пользователем: Lion » Зарегистрирован

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #132 от 29.09.2012 в 23:17:12 »

2Korchy:  29.09.2012 в 17:55:25, Korchy писал(a):
Я предлагал менять не размер элементов а размер указателя на массив.
Диаметрально противоположно. Размер указателя на 32битной платформе всегда! равен 4байтам, хоть это char * хоть void * хоть uint64 *. Разница только в адресуемых элементах. Это же прописные истины указателей. Как твоя структура сможет получить доступ к последнему элементу BigArray? Суть не в том как ты посчитаешь координаты а в том как в конечном итоге это должен будет сделать компилятор. Читай ниже ответ Льву.
 
2Lion:  29.09.2012 в 18:30:20, Lion писал(a):
попробовать массив [m][m][m] заменить на линейный массив [m*m*m]
Лёва, учи матчасть. :) Компьютер абсолютно ничего не знает о двух-, трёх-, двадцати-мерных массивах. Все они у него линейные. Просто в случае одномерного массиву ты делаешь арифметику для доступа к ячейке (что-то вроде i*line_size + j), а в случае многомерного эту арифметику за тебя делает компилятор, то есть, a[i][j] он как раз пересчитывает на i*line_size + j.
 
2Ushwood: Моё предложение это хэш-таблица. Из координат i,j,k считаешь хэш. Под этим хэшем у тебя будет сохранён динамический массив. Время доступа в хэш-таблице в среднем равно 1 (всё зависит от количества коллизий). Динамический массив придётся написать самому или взять из интернета. Вся суть в том чтобы аллоцировать массив по кускам, скажем по 100 элементов, в идеальном случае PAGE_SIZE/sizeof(int) что обычно равно 1024 минус всякие вспомогательные вещи. Выравнивание на ширину страницы ускоряет управление памятью. При такой организации данных среднее время на сохранение одной точки будет равно 1, потому что вставка в хэш-таблицу как и поиск равно 1, и вставка в линейный массив нового элемента тоже равно 1.
 
Что-то я не нашёл сложность вставки и поиска в Octree, но у обычных бинарных деревьев это n*log(n) что тоже быстро но всё равно хуже 1.
 
Приметка: если каким то чудесным образом та наперёд знаешь сколько точек будет находится по каждой координате то автоматически отпадает потребность в динамическом массиве.
« Изменён в : 29.09.2012 в 23:20:37 пользователем: jarni » Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #133 от 30.09.2012 в 00:56:12 »

2jarni:  
Ок, наверное я не прав.
Зарегистрирован

ban.gif
Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #134 от 30.09.2012 в 01:15:13 »

2jarni: Если я правильно помню, в Си вообще нет массивов, есть синтаксическая конструкция их заменяющая. По сути является указателем на первый элемент.
Зарегистрирован

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #135 от 30.09.2012 в 03:09:24 »

2Korchy:  
Code:

int main( int argc, const char * argv[] )
{
  unsigned char dummy[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xAA, 0xAA, 0xAA, 0xAA, 0xBB, 0xBB, 0xBB, 0xBB };
  int * ptri = (int*)dummy;
  long * ptrl = (long*)dummy;
  long long * ptrll = (long long *)dummy;
  printf("int  : var size %u, ptr size %u ptr %p valueh 0x%X\n", sizeof(*ptri), sizeof(ptri), ptri, *ptri );
  printf("long : var size %u, ptr size %u ptr %p valueh 0x%X\n", sizeof(*ptrl), sizeof(ptrl), ptrl, *ptrl );
  printf("int64: var size %u, ptr size %u ptr %p valueh 0x%I64X\n", sizeof(*ptrll), sizeof(ptrll), ptrll, *ptrll );
 
  int (*ptrai)[2] = (int(*)[2])dummy;
  printf("0x%X 0x%X\n", ptrai[0][0], ptrai[0][1] );  
  printf("0x%X 0x%X\n", ptrai[1][0], ptrai[1][1] );  
  printf("ai   : var size %u, ptr size %u\n", sizeof(*ptrai), sizeof(ptrai) );  
 
  ptri = (int*)0xBAADF00D;
  int i = INT_MAX;
  int j = INT_MAX;
  int value11 = ptrai[i][j];
  printf("value: pointers: 0x%p == 0x%p, values: 0x%X == 0x%X\n", &ptrai[i][j], &ptri, ptrai[i][j], ptri );
  return 0;
}

Результат:
Code:

int  : var size 4, ptr size 4 ptr 0012FF50 valueh 0x67452301
long : var size 4, ptr size 4 ptr 0012FF50 valueh 0x67452301
int64: var size 8, ptr size 4 ptr 0012FF50 valueh 0xEFCDAB8967452301
0x67452301 0xEFCDAB89
0xAAAAAAAA 0xBBBBBBBB
ai   : var size 8, ptr size 4
value: pointers: 0x0012FF44 == 0x0012FF44, values: 0xBAADF00D == 0xBAADF00D

 
int i = INT_MAX;
00411501  mov    dword ptr [ebp-54h],7FFFFFFFh  
  int j = INT_MAX;
00411508  mov    dword ptr [ebp-60h],7FFFFFFFh  
  int value11 = ptrai[i][j];
0041150F  mov    eax,dword ptr [ebp-54h] копирование в еах переменной i, INT_MAX
00411512  mov    ecx,dword ptr [ebp-48h] копирование в еcх значения ptrai, у меня 0x0012ff50
00411515  lea    edx,[ecx+eax*8] загрузка еффективного адреса, то есть указателя на начало 1ой строки матрицы. Здесь хорошо видна первая часть матричной арифметики: 0x0012ff50 + 0х7FFFFFFF * 8 = 0x0012ff50 + 0х7FFFFFF8 = 0x0012ff48. *8 потому что длинна строки матрицы это 8 байт или 2 int'а. По большому счёту указатель теперь указывает на 8 байт "левее" в стек
00411518  mov    eax,dword ptr [ebp-60h] копирование в еах переменной j, INT_MAX
0041151B  mov    ecx,dword ptr [edx+eax*4]  
копирование в еcх значения которое находится по адресу edx+eax*4 = 0x0012ff48 + 0х7FFFFFFF * 4 = 0x0012ff44. Ещё на 4 байта "левее" в стек. К сожалению мне "повезло" и адрес оказался валидным. У меня здесь по чистой случайности оказалась перемення ptri, поэтому в ecx залилось её значение - адрес dummy 0x0012ff50.
0041151E  mov    dword ptr [ebp-6Ch],ecx копирование из ecx в переменную value11
 
Теперь думаю всё более-менее понятно. При попытке посчитать координату указатель перетёк несколько раз, первый раз при попытке посчитать адрес нужной строки, второй раз при высчитывании адреса элемента в строке.
2Lion: Называй как хочешь, суть от этого не меняется.
 
Зарегистрирован

Don't worry, be happy.
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #136 от 30.09.2012 в 06:24:55 »

Всем спасибо за помощь :).  
Я нашел решение, самое тупое и, по-видимому, самое простое: исходный линейный массив точек сортируется (один раз) по возрастанию номера ячейки, в которые они входят, а в трехмерный массив 50х50х50 заносятся только границы соответствующих областей массива точек. Все.
« Изменён в : 30.09.2012 в 06:25:21 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #137 от 30.09.2012 в 06:29:33 »

2Ushwood: Это не решение, а обход решения :). Ведь у тебя всё равно останутся неиспользованные ячейки, в которые ни одна точка не попадает.
Зарегистрирован

Don't worry, be happy.
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #138 от 30.09.2012 в 07:52:22 »

2jarni: нет, не останется. Ты обратил внимание, что я написал - теперь у меня массив lattice не четырехмерный, а трехмерный? int lattice[m][m][m]. При этом lattice[0][0][0] - число точек в ячейке (0,0,0), lattice[0][0][1] - суммарное число точек в ячейках (0,0,0) и (0,0,1) и т.д. Поскольку массив точек отсортирован, этой информации мне достаточно, чтобы получить доступ ко всем точкам, находящимся в интересующей меня ячейке. Я задаю номер ячейки (i,j,k), и нужные мне точки в отсортированном линейном массиве - от lattice[i][j][k-1] до latticce[i][j][k].
Вместо 15 гигабайт размер массива 600 килобайт. Профит :).
 
ЗЫ. то есть пустые ячейки пространства останутся, конечно, это свойство системы. Но если раньше пустая ячейка пространства - это было 30000 нулевых интов, то теперь - один инт. С точки зрения расхода памяти - две большие разницы :).
« Изменён в : 30.09.2012 в 08:00:06 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #139 от 30.09.2012 в 17:47:24 »

2jarni:  
Я не совсем понял, что ты доказал примером, но я согласен, задача адресовать массив больше MAX_INT так просто не решается. И раз Юра такую задачу не ставит и нашел решение с маленьким массивом, ломать голову над этим не нужно. Хотя где-то на задворках сознания сидит мысля, что это все-таки возможно реализовать (но я на ней не настаиваю потому, что раньше такого не решал).
« Изменён в : 30.09.2012 в 17:48:22 пользователем: Korchy » Зарегистрирован

ban.gif
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #140 от 30.09.2012 в 21:22:34 »

2Korchy: Первая часть примера показывает что изменение типа указателя не меняет размер указателя и соответственно не позволяет адресовать больше а совсем даже наоборот, вторая часть показывает как возникает перетечение указательной арифметики и что это не обязтельно свалится с исключением которое бы указало что что-то не так.
 
 30.09.2012 в 17:47:24, Korchy писал(a):
задача адресовать массив больше MAX_INT так просто не решается
Ну почему же, решается очень просто аж до MAX_UINT. Вообще мне кажется немного некорректным использовать для индекса знаковые целые ведь индекс всегда >=0.
Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #141 от 30.09.2012 в 22:05:33 »

2jarni:  
 30.09.2012 в 21:22:34, jarni писал(a):
Первая часть примера показывает что изменение типа указателя не меняет размер указателя и соответственно не позволяет адресовать больше а совсем даже наоборот

Да, с этим согласен, я поторопился.
 
 30.09.2012 в 21:22:34, jarni писал(a):
Ну почему же, решается очень просто аж до MAX_UINT

Это тоже самое. Я имел ввиду выход за эти пределы.
Зарегистрирован

ban.gif
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #142 от 18.04.2013 в 01:49:39 »

Вопрос не совсем по С++, но не знаю, куда его загнать, а отдельной темы создавать явно смысла не имеет.
Задача такая: есть слово. Например MNEMONIKA. И есть условие поиска, например *MN*NIK* по которому слово находится. Нужно определить наибольшее кол-во совпавших символов и позиции совпавших фрагментов. Для данного примера ответ будет 1 (позиция) - 2 (кол-во совпадений), 6 - 3. В принципе алгоритм прост: последовательно фрагменты между звездочек двигаем по полному слову, считаем кол-во совпадений символов, максимальные значения запоминаем.
Проблем: сколько звездочек поставил пользователь в поиске заранее не известно. Считается при вызове процедуры поиска diff("*MN*NIK*","MNEMONIKA");
Вопрос: возможно ли организовать алгоритм циклами для динамического кол-во звездочек. Проблема №2: использовать массивы и динамические переменные нельзя - нужна процедура на языке MySQL, он динамику не поддерживает.
Я пока решил, что больше пяти фрагментов (4 звездочек) - это бред и тупо вложенными циклами сделал сканирование для пяти кусков.
Но хотелось бы понять, можно ли придумать алгоритм без массивов для любого кол-ва звездочек.
« Изменён в : 18.04.2013 в 01:50:42 пользователем: Korchy » Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #143 от 04.06.2013 в 20:43:29 »

Нужно простое динамическое хранилище для составных данных (struct известного размера). Попытался использовать vector, но билдер ругается на отсутствующий тип (хотя тип структуры объявлен ранее).  
 
typdef struct { ...} Abonent;
 
vector<Abonent> AbonentList;
 
ЧЯДНТ? Вся литература дома осталась, подглядеть негде :(
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #144 от 04.06.2013 в 20:48:22 »

2Artem13: А ты уверен что ругается на незнание Abonent'а? Может ты просто забыл std:: перед vector написать? У меня никаких проблем в ВС2008.
 
 04.06.2013 в 20:43:29, Artem13 писал(a):
Вся литература дома осталась
Гугл тебя забанил? :)
Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #145 от 04.06.2013 в 21:20:15 »

04.06.2013 в 20:48:22, jarni писал(a):
Может ты просто забыл std:: перед vector написать?

Это мысля! Ща попробую.
 
 04.06.2013 в 20:48:22, jarni писал(a):
Гугл тебя забанил?

Время мало - на моём рабочем компе нет инета, приходится на общий бегать.
 
Я просто СТЛ юзаю от случая к случаю, которые очень редки :)
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #146 от 04.06.2013 в 21:23:06 »

2Artem13:  04.06.2013 в 21:20:15, Artem13 писал(a):
на моём рабочем компе нет инета
Ух как всё грустно :(.  
 
Если добавка стд:: не помогла то было бы хорошо если бы ты скопировал сюда текст ошибки.
Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #147 от 04.06.2013 в 21:49:25 »

2jarni: Не, помогло. Большое спасибо!
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #148 от 23.07.2013 в 21:47:38 »

Други, нужен совет.
ИД: Есть расширяющаяся номенклатура приборов. Приборы поддерживают обмен по протоколу Modbus. Для каждого нового прибора мне приходится писать новую программу для работы с ним по цифровому интерфейсу.
Задача: написать б-м универсальную программу хотя бы для визуализации принятых с прибора данных. На данный момент я вижу один способ - во внеш. конфигурационных файлах описывать данные, получаемые с каждого типа приборов (доступное адресное пространство, название тип данных по определённым адресам).
Собсно, может кто предложить другой вариант. Если нет, то по озвученному - для конфиг-файлов использовать хml, ini или еще что?
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #149 от 23.07.2013 в 21:56:33 »

2Artem13: Тоже не вижу другого варианта кроме конфига. Универсальный способ без надобности перекомпиляции. А тип конфига выбирай из собственных преференций, что тебе легче парсить, важен ли размер файла, надо ли будет делать над конфигом какие-то другие операции вроде выборки подможеств параметров, надо ли удобство создания когфига и т.д.
Зарегистрирован

Don't worry, be happy.
jz
[жыз:)]


Я люблю этот Форум!




Пол:
Репутация: +318
Re: С++ Вопросы и ответы.
« Ответ #150 от 23.07.2013 в 22:17:25 »

23.07.2013 в 21:47:38, Artem13 писал(a):
Собсно, может кто предложить другой вариант. Если нет, то по озвученному - для конфиг-файлов использовать хml, ini или еще что?
Как я понял, большое преимущество XML перед INI - производителность при чтении Больших файлов. Т.е. 1Мб и т.д.
Если файл маленький, то INI лучше тем, что он проще по структуре, и понятнее обычным пользователям.  
В XML можно целиком класс засунуть, т.е. большую иерархию параметров сделать.
Также, под XML в соврем. языках (С#, Java) уже есть библиотечные функции.
 
 23.07.2013 в 21:47:38, Artem13 писал(a):
Задача: написать б-м универсальную программу хотя бы для визуализации принятых с прибора данных. На данный момент я вижу один способ - во внеш. конфигурационных файлах описывать данные, получаемые с каждого типа приборов (доступное адресное пространство, название тип данных по определённым адресам).
Можно сделать выпадающий список, при старте программа будет искать в папке "\devices" файлы ini, из них вытаскивать параметр "Name", и засовывать в ComboBox. Достаточно просто ini-файл с параметрами положить, и так подключаются новые устройства.
« Изменён в : 23.07.2013 в 22:19:47 пользователем: jz » Зарегистрирован

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #151 от 23.07.2013 в 22:57:27 »

23.07.2013 в 22:17:25, jz писал(a):
Можно сделать выпадающий список, при старте программа будет искать в папке "\devices" файлы ini, из них вытаскивать параметр "Name", и засовывать в ComboBox. Достаточно просто ini-файл с параметрами положить, и так подключаются новые устройства.

Ну примерно так оно и задумывается.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

bugmonster
[Баги! Баги везде!]
Source

ПРОГРАММИРЫ НЕ УЧИТЫВАЛИ ЭТУ СИТУАЦИЮ




Пол:
Репутация: +1337
Re: С++ Вопросы и ответы.
« Ответ #152 от 24.07.2013 в 00:37:21 »

23.07.2013 в 22:17:25, jz писал(a):
Как я понял, большое преимущество XML перед INI - производителность при чтении Больших файлов. Т.е. 1Мб и т.д.  
Если файл маленький, то INI лучше тем, что он проще по структуре, и понятнее обычным пользователям.  

Это стандартные виндовые функции ini медленные. Кому нужно используют нестандартные парсеры, которые и побыстрее xml могут быть. У xml тоже разное по скорости бывает, dom - медленное, sax - быстрое.
 
2Artem13: Если делать как следует и "для следующих поколений", то внешние конфиг-файлы, и выбор текущего в программе (да ещё и редактирование там же).
А если нужно чтобы работало и просто, то забей всё массивами прямо в исходниках.
 
По формату файлов: modbus не сложный, хватит и ini, и чтением виндовыми функциями (могу дать свой мегапарсер). Если нужны какие-то дополнительные навороты, думай про xml, google protocol и т.д.
Можно использовать boost::serialization, он вообще отвязан от типа файла, в котором сохраняет данные.
Зарегистрирован

Восславим же радость и мужество,
Труда и науки содружество
Восславим мудрую партию,
Помолимся за неё.

А Пентагон в свои руки поганые,
Пусть возьмёт свои доллары сраные
И в ж... себе затолкает

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #153 от 24.07.2013 в 01:27:09 »

24.07.2013 в 00:37:21, bugmonster писал(a):
По формату файлов: modbus не сложный, хватит и ini, и чтением виндовыми функциями (могу дать свой мегапарсер).

Да дело то не в протоколе как раз. В ини будет хранится данные по интерпретации полученных по этому самому протоколу данных. Для модбаса у меня уже нарисована собственная кривенькая библиотека.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jz
[жыз:)]


Я люблю этот Форум!




Пол:
Репутация: +318
Re: С++ Вопросы и ответы.
« Ответ #154 от 24.07.2013 в 06:26:13 »

24.07.2013 в 01:27:09, Artem13 писал(a):
Для модбаса у меня уже нарисована собственная кривенькая библиотека.
:o
 
http://libmodbus.org/documentation/
http://www.servotechnica.spb.ru/library/Modbus
http://www.cyberforum.ru/asutp/thread426227.html
http://www.codesys.ru/art3
http://sourceforge.net/projects/jamod/
http://sine.ni.com/devzone/cda/epd/p/id/4756
http://www.movicom.ru/ru/software/movidevlib.html
 
Наверное,уже все написано до нас. Эти ссылки, может некорректные, но наверняка в инете уже написано (особенно в американском). Бывает даже крутые вещи с GPL/GNU, на которые в России можно наплевать :-).
« Изменён в : 24.07.2013 в 06:28:30 пользователем: jz » Зарегистрирован

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #155 от 24.07.2013 в 20:27:43 »

2jz: Для меня проще нарисовать свою, чем пытаться разобраться как работают чужие. Как правило, документёж у них слабоват для моего понимания.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #156 от 08.09.2013 в 08:02:23 »

Весь день думаю ЧЯДНТ.
 
WinApi с его LPWSTR текстами умеет работать с вещественными числами?
 
Абстрактно есть три поля "EDIT", программе надо из двух из них считать два вещественных числа, сложить их, и вывести в третье. Это возможно без бубна?
 
По непонятным мне причинам, с целыми числами всё работает, а с вещественными нет. Такое ощущение, что swscanf, wsprintf и им подобная ересь не знают о существовании %f, %e и %g.  :(
Зарегистрирован

Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #157 от 08.09.2013 в 08:22:56 »

А Винда вообще в курсе, что есть вещественные числа?
 
Консольный вариант уверенно читает целые числа, а при встрече с вещественным сразу же ноль.
 
Зарегистрирован

Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #158 от 08.09.2013 в 08:52:39 »

Как хорошо, что мне надо программировать под линукс.  : rolleyes :
Я просто офигеваю от винды.  
 
Я честно не понимаю, почему вещественное число получается читать так:
std::cin >> b;
 
и не получается так:
scanf ("%g", &b);
 
Хотя с линуксом я годами обходился без первого варианта и всё читалось просто классно.  :o
 
А целые читаются и так и так.  : rolleyes :
« Изменён в : 08.09.2013 в 08:54:58 пользователем: Lion » Зарегистрирован

Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #159 от 08.09.2013 в 10:46:39 »

Удалось пришить вещественные числа через std::wstringstream и ifstream, кажется, теперь всё работает. Чувствую себя верховным шаманом, который после 15 часов игры на бубне призвал тёмного духа, отлучённого от света за познание дробных чисел.
 
Если кто-то мне расскажет, почему у меня ничего не получилось нормальными методами (sprintf etc) -  я с удовольствием послушаю.  :)
 
Зарегистрирован

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #160 от 08.09.2013 в 17:47:52 »

2Lion:  
Наверное нужно пару базовых моментов прояснить сначала:
1. "виндовс" не знает, что такое вещественные числа. Если мы говорим о языке программирования С++ то в нем есть строго определенный набор типов данных. Что касается чисел - есть целые числа (int, int64) и числа с плавающей точкой (float,float64,double). Как я понимаю, вопрос касается чисел с плавающей точкой.
2. Поля Edit и консольные функции scanf,printf друг с другом не сочетаются. Или ты делаешь приложение визуальное (vcl,windows forms и т.п.) или консольное и тогда ты используешь функции ввода/вывода через потоки. Смешивать одно с другим конечно можно, но обычно получается не комильфо.
3. По объяснениям понять сложно. Если проблема как у тебя в коде - давай в студию кусок кода, который не работает. А так - понять сложно, в чем именно у тебя причина, поэтому мало кто сможет "рассказать почему не получилось"
 
Ну и собственно предположительный ответ: у меня все получается. Так что смотри скорее всего ошибки в своем коде:

Вот прицепился!       printf.jpg
Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #161 от 08.09.2013 в 21:27:40 »

Ну да. Лёва, ты бы хоть озвучил в чем на винде работать пытаешься.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #162 от 08.09.2013 в 22:19:15 »

2Korchy:  
1. Бытие определяет сознание. Я в жизни с float и double работаю очень редко. Для меня они именно вещественные, потому что, когда я пишу для учёбы, у меня бывают числа:
целые:
INTEGER
вещественные:
REAL*4 и REAL*8
и комплексные:
COMPLEX*8 и COMPLEX*16
 
По аналогии со вторыми float и double в моём сознании оказываются вещественными.
 
А когда я на отдыхе, то я оказываюсь в весёлом мире целых чисел:
UINT8; INT8; UINT16; INT16; UINT32; INT32;  
 
2) Понятно, но мне потоки визуально не нравились, как они в тексте программы выглядят. Я всегда писал scanf, printf, sprintf, sscanf... а тут плохо пошло.
 
3) Спасибо. Уже нашёл - мой косяк. Потерял буковку "l". Вот что получается, если за полтора года не встретить ни одного числа типа float или double. : shuffle :
 
Мне стыдно.
 
Зато что-то в первый раз написал с потоками, только  следующему разу всё-равно забуду.  :(
 
2Artem13: Microsoft Visual Studio 2010 Express
« Изменён в : 08.09.2013 в 22:21:16 пользователем: Lion » Зарегистрирован

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #163 от 08.09.2013 в 23:44:00 »

08.09.2013 в 22:19:15, Lion писал(a):
По аналогии со вторыми float и double в моём сознании оказываются вещественными.  

float ни разу не вещественное число. Никакой аналогии здесь быть не может.  
Попробуй поскладывать/вычитать маленькие float, пять шесть нулей после запятой. Почувствуешь разницу :)
Зарегистрирован

ban.gif
Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #164 от 09.09.2013 в 01:39:55 »

08.09.2013 в 23:44:00, Korchy писал(a):
Попробуй поскладывать/вычитать маленькие float, пять шесть нулей после запятой.
А не надо такие числа складывать/вычитать.
 
Есть мнение, что если надо вычитать два таких числа, то у автора неправильная система единиц.
 
Считается, что в идеале при вычислениях все числа должны быть порядка 1.  
А если вы измеряете свой рост в а.е., то это плохо.  : rolleyes :
Зарегистрирован

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #165 от 09.09.2013 в 04:27:30 »

2Lion:  09.09.2013 в 01:39:55, Lion писал(a):
Есть мнение, что если надо вычитать два таких числа, то у автора неправильная система единиц.  
Это с каких таких пор? Например, нормированная матрица описывающая движение (ротация, трансляция и масштаб) состоит из реальных чисел <=1. При операциях с такой матрицей важна точность, скажем 10^-12, например при поиске инверсионной матрицы. На практике у меня доходило до того что C++-го double не хватало и у меня выходил другой результат чем у той же операции но в MATLABе.
Зарегистрирован

Don't worry, be happy.
Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #166 от 09.09.2013 в 05:57:04 »

2jarni:  
09.09.2013 в 04:27:30, jarni писал(a):
Это с каких таких пор?
Про человеческий рост и а.е. в предыдущем посте, например.  
 
Во-вторых, если уж вам так хочется  09.09.2013 в 04:27:30, jarni писал(a):
точность, скажем 10^-12, например при поиске инверсионной матрицы.
То можно использовать специальный аттач к Си, который позволяет получать любую точность. У меня так знакомый считал H-функцию Чандрасекара со 100 значащими цифрами. : nervous :
 
Могу узнать, чем он пользовался. Интернеты говорят о нескольких возможных вариантах.  : rolleyes :
« Изменён в : 09.09.2013 в 06:00:42 пользователем: Lion » Зарегистрирован

coolberg
[Ядрёна-Матрёна]
Прирожденный Джаец






Пол:
Репутация: +138
Re: С++ Вопросы и ответы.
« Ответ #167 от 09.09.2013 в 06:59:25 »

Float на то и float, что он floating point. Неважно (практически), маленькое это число, или большое. Важно, каково соотношение между старшими и младшими порядками в записи этого числа. Мантисса float по IEEE754 имеет 23 бита, это даёт разброс значений между старшим и младшим битами в 2^23 ~ 9 000 000 раз.
Зарегистрирован

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #168 от 09.09.2013 в 07:11:01 »

2Lion:  09.09.2013 в 01:39:55, Lion писал(a):
А не надо такие числа складывать/вычитать.  

Это просто для наглядного примера. На самом деле складывая float 0.25 и 0.25 не всегда получишь 0.5.
А где это реально проявляется - банально движение объекта по экрану. Стандартынй твипс = 0.25 пиксела. Вот только при дельте движения в четверть пиксела через какое-то время объект начинает заметно глазу дрожать. Потому как float.
 
 09.09.2013 в 06:59:25, coolberg писал(a):
Важно, каково соотношение между старшими и младшими порядками в записи этого числа.  

Ну это если углубляться. Я всего-лишь хотел сказать что float нельзя приравнивать к вещественному числу.
Зарегистрирован

ban.gif
Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #169 от 09.09.2013 в 07:21:58 »

09.09.2013 в 07:11:01, Korchy писал(a):
Я всего-лишь хотел сказать что float нельзя приравнивать к вещественному числу.
Ну... Это модель вещественного числа, а модели всегда отражают реальность лишь в некотором приближении. А что такое реальность?
 
С достаточно большой точностью каждый из нас не существует.  : rolleyes :
 
Offtop:
Зарегистрирован

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #170 от 09.09.2013 в 07:47:10 »

Offtop:
Зарегистрирован

ban.gif
coolberg
[Ядрёна-Матрёна]
Прирожденный Джаец






Пол:
Репутация: +138
Re: С++ Вопросы и ответы.
« Ответ #171 от 09.09.2013 в 08:01:36 »

09.09.2013 в 07:11:01, Korchy писал(a):
Это просто для наглядного примера. На самом деле складывая float 0.25 и 0.25 не всегда получишь 0.5.  
Всегда.
А вот если инициировать переменную float sum = 0.f и в цикле делать sum += 0.25f - вот тут-то начиная с какой-то большой итерации и полезут ошибки.
Зарегистрирован

Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #172 от 09.09.2013 в 08:03:57 »

2Korchy:
Offtop:
Зарегистрирован

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #173 от 09.09.2013 в 20:36:39 »

2coolberg:  
Собственно про цикл я и писал выше :)
Зарегистрирован

ban.gif
coolberg
[Ядрёна-Матрёна]
Прирожденный Джаец






Пол:
Репутация: +138
Re: С++ Вопросы и ответы.
« Ответ #174 от 10.09.2013 в 00:18:23 »

2Korchy: сорри :) Опять эта моя привычка читать одно предложение и сразу бросаться на клавиатуру ;D
Зарегистрирован

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #175 от 22.11.2013 в 21:52:34 »

Други, вопрос по СОМ-порту - как можно проверить паритет принятой посылки? Если вообще можно.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #176 от 23.07.2014 в 02:26:58 »

Какая-то непонятная хрень сейчас произошла.
Моя прога, написанная на С++, перестала запускаться на рабочем компе. Экзешник не запускается принципиально, при попытке запустить из-под оболочки (Visual studio 2008 ) выдает: The program '[1640] inst_cycle.exe: Native' has exited with code -1073741823 (0xc0000001). Сразу, без перехода даже к первой строке кода.
Пикантность ситуации заключается в том, что на моем домашнем компе и даже на другом рабочем компе она запускается без проблем.
На всех трех компах стоит Win7 (на проблемном и домашнем 64 бит, на втором рабочем 32 бит), одна и та же ВижуалСтудия, памяти хватает. Я ничего не понимаю.
Думал, глюканул проект. Создал проект заново - не помогло.
Есть у кого идеи?
« Изменён в : 23.07.2014 в 02:30:58 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #177 от 23.07.2014 в 02:54:37 »

Щас, поподробнее.
 
Другую мою прогу запускаю на том же компе. Запускаю по F5, в отладочном режиме.
Мне Студия пишет:
Quote:
'Dosetest.exe': Loaded 'C:\Work\Visual Studio projects\MyProjects05\Dosetest\Debug\Dosetest.exe', Symbols loaded.
'Dosetest.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll'
'Dosetest.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll'
'Dosetest.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll'
'Dosetest.exe': Loaded 'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.2102 2.8_none_96748342450f6aa2\msvcp90d.dll', Symbols loaded.
'Dosetest.exe': Loaded 'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.2102 2.8_none_96748342450f6aa2\msvcr90d.dll', Symbols loaded.

 
Когда запускаю по F5 эту прогу, мне Студия пишет другое:
Quote:
'inst_cycle.exe': Loaded 'C:\Work\Visual Studio projects\MyProjects05\inst_cycle\Debug\inst_cycle.exe'
'inst_cycle.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll'
'inst_cycle.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll'
'inst_cycle.exe': Unloaded 'C:\Windows\SysWOW64\kernel32.dll'
The program '[5448] inst_cycle.exe: Native' has exited with code -1073741823 (0xc0000001).
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #178 от 23.07.2014 в 04:28:09 »

2Ushwood: дык говорит жеж, что кернел не загружен. Есть ощущень, что система глюканула.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #179 от 23.07.2014 в 06:09:24 »

2Artem13: дык а почему он то загружен, то не загружен? С одного компа подряд запускал те две проги...
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #180 от 23.07.2014 в 06:28:32 »

2Ushwood: Вариантов много:
1. Что-то попортилось в самой проге, ребилд может помочь.
2. Что-то попортилось в винде, может помочь обычный рестарт.
3. Недавно установился апдейт который что-то где-то попортил - откат до апдейта.
4. Антивирю что-то не нравится и он не позволяет программе запуститься.
5. Попробуй включить режим совместимости.
Зарегистрирован

Don't worry, be happy.
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #181 от 23.07.2014 в 07:34:56 »

2jarni: ребилд не помог, недавно (т.е. между "только что работала" и "ой, не работает") ничего вообще не ставил, остальное завтра на работе попробую.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #182 от 23.07.2014 в 19:59:05 »

Я бы попробовал еще полную пересборку. Удали все временные файлы (obj, lnk и т.п.) и сделай полный ребилд (не запуск по f5, а Project - Rebild All)
Зарегистрирован

ban.gif
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #183 от 23.07.2014 в 21:11:37 »

23.07.2014 в 19:59:05, Korchy писал(a):
Я бы попробовал еще полную пересборку. Удали все временные файлы (obj, lnk и т.п.) и сделай полный ребилд (не запуск по f5, а Project - Rebild All)
 
Это я еще вчера пробовал.
 
2jarni: будешь смеяться, но помогла банальная перезагрузка компа :). Т.е. да, система глюканула.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #184 от 23.07.2014 в 21:42:28 »

23.07.2014 в 21:11:37, Ushwood писал(a):
будешь смеяться, но помогла банальная перезагрузка компа . Т.е. да, система глюканула.

Винда жеж ...
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #185 от 23.07.2014 в 22:05:45 »

2Ushwood: :). Смеялся бы если бы не было так грустно. ЕМНИП у коллеги недавно была подобная проблема и он говорил что помог обычный рестарт системы, но перед этим пол дня пром*дохался пытаясь понять где же проблема.
Зарегистрирован

Don't worry, be happy.
ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #186 от 23.07.2014 в 23:15:27 »

Жжоте, господа.  : rolleyes :
Семь бед - один резет не шутка, а насущная необходимость. Перезагрузка системы конечно не панацея, но в случае винды должна стоять на первом месте.
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #187 от 24.07.2014 в 05:00:19 »

2ПМ: Я сейчас второй день активно ковыряю исходники НО. VS 2010. Примерно в трети случаев проект не собирается из-за каких-то непонятных ошибок. Получив такое сообщение нажимаю на ту же самую команду сборки проекта. И, о чудо, проект собирается идеально.  
 
Почему при сборе одних и тех же исходников они сначала не собрались, а через 20 секунд собрались - ума не приложу.  :)
Зарегистрирован

ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #188 от 24.07.2014 в 05:11:39 »

2Lion:  
Кто разработчики VS?  :D
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #189 от 24.07.2014 в 05:20:11 »

2ПМ:  :D
В том то и проблема.  
Можно, конечно, перевести сбор исходников на другое IDE, вот только кто этим будет заниматься?
Для учёбы/работы VS не использую, но там объёмы меньше и можно обходиться более простыми  средствами.
Offtop:
Зарегистрирован

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #190 от 24.07.2014 в 05:45:58 »

24.07.2014 в 05:20:11, Lion писал(a):
Последнее общение с Borland C++ Builder тоже было не самое приятное.

Только из-за неправильных действий оператора. За 10 лет использования глюков самой ИДЕ не ловил. Начал с 4 версии, сейчас на 6.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #191 от 24.07.2014 в 08:22:43 »

2Artem13: Может быть. Может из-за того, что очень непривычен такой формат IDE, ибо работаю я с ним по 2 дня раз в два года.  :)
Зарегистрирован

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #192 от 24.07.2014 в 08:55:24 »

24.07.2014 в 05:45:58, Artem13 писал(a):
За 10 лет использования глюков самой ИДЕ не ловил

Поддерживаю, борландовский компилятор на удивление стабилен, по сравнению с микрософтовским.
 
 24.07.2014 в 05:00:19, Lion писал(a):
Почему при сборе одних и тех же исходников они сначала не собрались, а через 20 секунд собрались - ума не приложу

Исходники JA же портированы с C на С++. Отсюда растут ноги множества совершенно непонятных проблем.
« Изменён в : 24.07.2014 в 08:57:17 пользователем: Korchy » Зарегистрирован

ban.gif
Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #193 от 24.07.2014 в 20:51:55 »

24.07.2014 в 08:55:24, Korchy писал(a):
борландовский компилятор на удивление стабилен
Пожалуй, я не совсем правильно выразился: сам процесс компиляции не вызывает нареканий, а вот процесс написания очень непривычен.
Зарегистрирован

Терапевт
[Кулибин]


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1187
Re: С++ Вопросы и ответы.
« Ответ #194 от 24.07.2014 в 21:00:43 »

24.07.2014 в 05:00:19, Lion писал(a):
Примерно в трети случаев проект не собирается из-за каких-то непонятных ошибок.

При определённых изменениях, особенно хидеров (.h), проблемы могут возникнуть из-за инкрементальной линковки. Лечится перекомпилацией всего проекта или его части. Тут нужно выбрать или скорость, или безглючность.
 
 24.07.2014 в 08:55:24, Korchy писал(a):
Исходники JA же портированы с C на С++. Отсюда растут ноги множества совершенно непонятных проблем.

Нет там никаких проблем. Исходники написаны практически целиком на С. А перевод компиляции на более строгие правила С++ наоборот позволил выявить некоторые ошибки.
 
Зарегистрирован

Весна! Я уже не грею пиво! (с) В.Цой
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #195 от 24.07.2014 в 21:22:16 »

24.07.2014 в 21:00:43, Терапевт писал(a):
Нет там никаких проблем

Тут тебе виднее. Я с исходниками JA имел дела очень мало. Но сталкивался с подобным при переводе других проектов с С на С++.
Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #196 от 12.08.2014 в 20:55:35 »

Продолжаю запрос из Рабочих вопросов :)
Кто имел дело с программированием мобильных устройств. Желательно планшетов. Что использовали? а то подозреваю, что мой любимый ВСВ6 на Вин8 не запустится вовсе :) Пиратить VS не хочется, покупать -  дорого (теоретически, но надо уточнять). Осваивать его почти с 0.
Есть вариант перейти на Qt, но его преимущества ограничиваются бесплатностью и кроссплатформенностью. И осваивать также почти с 0.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Терапевт
[Кулибин]


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1187
Re: С++ Вопросы и ответы.
« Ответ #197 от 12.08.2014 в 21:56:51 »

12.08.2014 в 20:55:35, Artem13 писал(a):
мой любимый ВСВ6 на Вин8 не запустится вовсе  

По слухам он вполне нормально работает и на 7, и на 8, если ставился с корректного дистрибутива.
А планшет на Win8 от полноценного компьютера отличается только размером.
Зарегистрирован

Весна! Я уже не грею пиво! (с) В.Цой
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #198 от 13.08.2014 в 17:19:19 »

На Win7 уже имею с ним проблемы, корректно не запускается в отладочном режиме приложение для работы с базами через odbc. Обхожусь установкой виртуалки с ХР и с билдером уже на ней. На вин-8 скорее всего будет еще хуже.
Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #199 от 14.08.2014 в 20:50:14 »

В общем, с доступностью и ценой Вин-планшетов все плохо. Но это как начальство решит.
Поэтому вопрос программирования под андроид пока актуален. Но поскольку я вспомнил про Qt, то само программирование уже не проблемно. Возникает вопрос программирования USB под Линукс/Андроид. Есть тут кто занимался? Ну или посоветуйте адекватный русскоязычный ресурс (чтени по-аглицки меня сильно напрягает и хватает меня ненадолго :( ).
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #200 от 18.04.2015 в 01:06:56 »

Народ, а тут кто-нибудь программирует с использованием OpenMP? А то я сейчас его осваиваю, по одному вопросу пребываю в недоумении, а спросить не у кого.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #201 от 18.04.2015 в 01:11:19 »

2Ushwood: Увы, я нет.
Зарегистрирован

Don't worry, be happy.
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #202 от 18.04.2015 в 03:57:24 »

Пока суд да дело, возник вопрос просто по Visual studio.
 
Где сидит настройка компилятора, которая определяет, вычисляется логическое выражение до конца или до получения результата? И как оно по умолчанию?
« Изменён в : 18.04.2015 в 03:57:47 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #203 от 18.04.2015 в 04:01:33 »

Такой настройки нету потому что это поведение не настраивается, оно определено стандартом. ИЛИ вычисляется до первого ПРАВДА, И до первого ЛОЖНО.
Зарегистрирован

Don't worry, be happy.
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #204 от 18.04.2015 в 04:58:34 »

Спасибо.
 
Хм... то, что такой настройки нет, вызывает недоумение, но существующий вариант в большинстве случаев подходит :).
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #205 от 18.04.2015 в 05:09:43 »

То что такой настройки нет это большое счастье иначе на данную конструкцию невозможно бы было положиться и она бы потеряла весь смысл своего существования. Только представь себе, ты написал код
if (ptr && ptr->checksomething())
надеясь что второе выражение не будет исполнено если указатель нулевой, а кто-то взял и включил настройку которая заставляет исполнится оба выражения в обязательном порядке. Думаю что из данного примера становится очевидно что такая настройка уничтожила бы детерминизм, саму основу программирования.
Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #206 от 18.04.2015 в 06:53:58 »

2Ushwood:  
 18.04.2015 в 04:58:34, Ushwood писал(a):
Хм... то, что такой настройки нет, вызывает недоумение, но существующий вариант в большинстве случаев подходит

А приведи вариант, в котором он не подходит? ;)
 
На самом деле все, мне кажется, проще: когда пишется условие - единственное, что нужно, это знать выполняется оно или нет. И чисто математически если часть условия И уже равна false (т.е. не выполняется) то и все условие целиком будет false. Тоже самое с ИЛИ.
На этом просто экономятся вычислительные мощности. Если ты пишешь что-то вроде
if(func1()&&func2()&&func3())
и вычисление каждой из этих функций занимает по 3 часа - логично потратив первые 3 часа на вычисление первой из них, если она однозначно указывает, что все условие не выполняется - не тратить еще 6, а сразу выйти.
Зарегистрирован

ban.gif
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #207 от 18.04.2015 в 07:13:17 »

2Korchy: представь себе, что в приведенном тобой примере эти func1() и прочие делают еще что-то, помимо собственно вычисления результатов функции. И тебе нужно не только значение логической конструкции, но и сопутствующие изменения других каких-то переменных.
У меня один раз был такой случай. Давно, когда я еще на Паскале программировал. Тогда я этим вопросом и озаботился... и там как раз эту вещь можно было настраивать. Потому-то я и удивился, что ее нельзя настраивать здесь.
Сейчас у меня не такой случай, а как раз ближе к тому, который выше привел Ярни, и именно поэтому, памятуя о своих прошлых приключениях с Паскалем, я задал здесь этот вопрос - чисто на всякий пожарный.
 
А про экономию вычислительных мощностей - это понятно и очевидно... как раз поэтому в большинстве случаев стандартный вариант и годится :).
« Изменён в : 18.04.2015 в 07:22:29 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #208 от 18.04.2015 в 07:40:40 »

2Ushwood: в случае если тебе надо выполнить независимые операции то ты не имеешь права использовать данную конструкцию, она сделана исключительно для того чтобы выполнять следующую операцию в зависимости от результата выполнения предыдущей. считай это ограничением языка на котором тебе приходится писать, увы.
Зарегистрирован

Don't worry, be happy.
Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #209 от 18.04.2015 в 08:12:35 »

2Ushwood:  
Не могу на вскидку придумать пример, но вот как-то так:
 
int a = 2;
if(func1()&&func2()) return false;
else return true;
 
bool func2() {
if(a<3) {
a = 10;
return true;
}
else return false;
}
 
bool func1() {
if(a<5) return false;
else return true;
}
 
что должно вернуться в итоге при твоем подходе?
Зарегистрирован

ban.gif
Терапевт
[Кулибин]


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1187
Re: С++ Вопросы и ответы.
« Ответ #210 от 18.04.2015 в 08:27:46 »

18.04.2015 в 05:09:43, jarni писал(a):
То что такой настройки нет это большое счастье иначе на данную конструкцию невозможно бы было положиться

В интерпретируемых языках на неё и нельзя без проверки полагаться. Не знаю, как в современных скриптовых, но в старых MS VB6/VBA/VBS, с которыми мне порой до сих пор приходится иметь дело, логическое условие выполняется целиком, что доставляет массу практических неудобств.
Зарегистрирован

Весна! Я уже не грею пиво! (с) В.Цой
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #211 от 18.04.2015 в 08:28:50 »

2Korchy: зачем придумывать заведомо парадоксальные конструкции? Такое, естественно, никто писать не будет.
Функция func2 может содержать какое-нибудь безобидное b++, которое в силу каких-то причин должно выполняться именно в функции func2.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #212 от 18.04.2015 в 09:21:15 »

2Ushwood:  
Мой парадоксальный пример должен был сказать - "не надо стрелять себе в ногу". Собственно он иллюстрирует слова Ярни о том, что нельзя смешивать логику выполнения  18.04.2015 в 07:13:17, Ushwood писал(a):
еще что-то, помимо собственно вычисления результатов функции

и собственно вычисления условия. Если в результате твоего безобидного b++ функция, которую ты уже просчитал будет возвращать не то значение, которое было до инкремента b, ты получишь тот же самый парадокс. Такие вещи не должны смешиваться иначе рано или поздно мой пример окажется очень реальным :)
« Изменён в : 18.04.2015 в 09:24:10 пользователем: Korchy » Зарегистрирован

ban.gif
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #213 от 18.04.2015 в 09:26:37 »

2Терапевт: Я, честно говоря, при упоминании Visual Studio автоматически подумал о С++ и из этого исходил, указывая что поведение описано в стандарте. С другими языками мне приходилось сталкиваться мало и все они в идеологии исходили из с/с++.
 
2Ushwood:  18.04.2015 в 08:28:50, Ushwood писал(a):
Такое, естественно, никто писать не будет.  
Ты был бы сильно удивлён... :) Мне тоже как-то удалось написать конструкцию напоминающую каконическую
int x = 7;
x = ++x + x++;
Пример Korchy вполне реально написать если не знать всего что делают функции (побочные эффекты о которых ниже), что есть нормально при использовании библиотечных функций.  
 
 18.04.2015 в 08:28:50, Ushwood писал(a):
Функция func2 может содержать какое-нибудь безобидное b++
Правила хорошего тона говорят что функция не должна иметь побочных эффектов, то есть, если есть функция которая выполняет b++ а также возвращает bool результат которого от b++ не зависит то код должен быть разделён на две функции. Понятно что в жизни это не всегда так, но тогда и конструкции надо подбирать соответсвующие, исходя из знания тела вызываемых функий.
Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #214 от 07.04.2016 в 09:11:58 »

Народ, нарвался на задачку, придумать решение которой не могу.
Есть переменной длины (1000 +/- 5%) набор отсчетов. Нужно визуализировать его в жестко заданной сетке 300х600 пикселей с неизвестным заранее масштабом. Если ординату я могу отнормировать, то как это дело уложить по абсциссе - не представляю :( Проблема в том, что я не могу сделать плавающий предел, как и как-то изменить (отсечь или аппроксимировать) длину выборки (масштаб по абсциссе задан начальным и конечным значением). Единственное, что придумалось - проредить массив. Но я не могу придумать алгоритм, позволяющий это сделать при переменной его длине, да еще и так, чтобы он составил конкретную конечную длину (500-600).
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #215 от 07.04.2016 в 09:36:24 »

Если измерения идут с фиксированным интервалом тогда все ок, иначе будут дыры.  
1. Считаешь масштаб, скажем, 1079 измерений от 5 до 14 секунды на 600 пикселей. Это 15 мс на пиксель.  
2. В цикле с 15 мс шагом ищешь ближайшее измерение к данному времени, то есть ближайшее к t из интервала [t-dt/2, t+dt/2], где dt = 15, t это актуальное время в цикле.
3. Если нету никого близко тогда данный столбец останется пустым.
 
Из алгоритма видно что количество измерений не имеет значения, выборка проходит по фиксированному интервалу.
 
Кажется простым, но это может быть потому что я не на 100% понял задание. Может на бумаге нарисуешь что есть и чего хочешь достичь?
« Изменён в : 07.04.2016 в 09:38:55 пользователем: jarni » Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #216 от 07.04.2016 в 10:16:04 »

2jarni: Ага, уловил. Что-то подобное крутилось в голове, но вот так алгоритмизировать не сумел. Вроде похоже на правду. Единственное - там масштаб абсцисс опосредованный, т.е. отсчёты берутся с постоянным ВРЕМЕННЫМ шагом, а масштаб - ток :) Т.е. известны начальный и конечный токи и характеристика его изменения между, но нет однозначного соответствия отсчитываемым значениям. Но попробую твой алгоритм применить к индексам исходного массива.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #217 от 28.09.2016 в 09:49:43 »

I need help!!! Вернулся из "отпуска". Во время моего отсутствия винда (10) обновилась. Теперь Билдер 6 отказывается собирать проект - Linker Fatal Error Unable to open file VCLX.L  Кто знает, что с этим делать? Переустановка BCB6 не помогла :(
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #218 от 28.09.2016 в 10:25:39 »

Я даже с 7 виндой не смог шестой билдер корректно подружить. Выхожу из положения так - скачал vmware, поставил туда XP, расшарил папку с проектами и подключил ее в XP как диск, с которого и беру проекты в билдере. Единственный затык - достаточно медленное обращение по сети, тестировать живые сетевые проекты не особо удобно.
Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #219 от 28.09.2016 в 10:43:28 »

2Korchy: Не знаю, как сетевые сокеты и прочая фиговень - не работал, а с десктопными приложениями траблов не было и тут такой вот закидон. Напиться с горя, чтоли :( Давно надо было на Qt  перейти, да все лень было :(
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #220 от 28.09.2016 в 11:36:45 »

Да, как раз с сетью у меня и были проблемы, и вот через такой костыль с виртуалкой их удалось худо-бедно решить.
Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #221 от 28.09.2016 в 13:24:49 »

Всё оказалось проще - какой-то левый мусор в файле проекта. Почистил файло ручками - все заработало.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #222 от 24.02.2017 в 15:41:48 »

Комрады, хочу проконсультироваться.
Я тут озаботился производительностью одной из своих программ. Прогнал ее через встроенный профилятор VS2015 и получил несколько озадачивших меня результатов. Оказалось, узкие места моей программы совсем не там, где я предполагал.
Вот один пример.

Прям так и хочется спросить: какого черта?
В строке 1069 всего одна операция умножения двух величин типа double. В строке 1067 одна операция умножения инта на дабл и одна операция сравнения. Почему первая занимает 2.2% времени, а вторая меньше 0.1% (иначе профайлер мне бы ее подсветил)?
Строка 1068 понятна, только если сравнивать со строкой 1069, - все-таки там два сложения, одно деление и одно умножение (sqr у меня оформлен как директива #define sqr(x) ((x)*(x)) ). А строка 1072 непонятна вообще. Там всего лишь сравнение двух даблов и проверка двух булевских условий (одно - глобальная контанта, второе - параметр), причем первое условие выполняется крайне редко, в 0.07% случаев.
Может кто-нить пояснить, что именно я не понимаю, а главное - как это можно вылечить?
Вот прицепился!       profile.jpg
« Изменён в : 24.02.2017 в 15:48:46 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #223 от 24.02.2017 в 15:55:21 »

Добавлю еще: чуть ниже по ходу этой функции идет вот такая строка:
if (bond_flag && bond_potential_flag && r2 > diam2*sqr(rrectmax))
  return 0;
Здесь первые две - булевские константы, равные 1, а в конце проверка условия с двумя умножениями. Так вот, она "весит" 3.6% против 7.1% у строки 1072. Никаких ветвлений между этими строками нет, return в строке 1073 почти никогда не выполняется...
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Терапевт
[Кулибин]


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1187
Re: С++ Вопросы и ответы.
« Ответ #224 от 25.02.2017 в 14:27:05 »

24.02.2017 в 15:41:48, Ushwood писал(a):
Прям так и хочется спросить: какого черта?

Для ответа на этот вопрос надо смотреть, какой там получается ассемблерный код, как распараллеливаются инструкции конвеера. Операции с плавающей точкой очень ресурсоёмки в плане тактов процессора.
 
 24.02.2017 в 15:55:21, Ushwood писал(a):
Так вот, она "весит" 3.6% против 7.1% у строки 1072.  

В данном случае, возможно, имеет смысл для строки 1072 сравнение убрать в конец условия, чтобы сначала срабатывали простые логические проверки. Такие условия вычисляются не целиком, а до того момента, когда уже однозначно можно судить о результате.
Зарегистрирован

Весна! Я уже не грею пиво! (с) В.Цой
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #225 от 25.02.2017 в 15:22:16 »

25.02.2017 в 14:27:05, Терапевт писал(a):
В данном случае, возможно, имеет смысл для строки 1072 сравнение убрать в конец условия, чтобы сначала срабатывали простые логические проверки. Такие условия вычисляются не целиком, а до того момента, когда уже однозначно можно судить о результате.  
это-то я знаю. Но r2<diamcore дает true всего в 0.07% случаев (в том конкретном расчете), параметр hardcount - в 50% случаев, а hardcoreflag - константа, которая всегда равна 1. Я потому и поставил на первое место самое редко выполняющееся условие.
 
 25.02.2017 в 14:27:05, Терапевт писал(a):
Операции с плавающей точкой очень ресурсоёмки в плане тактов процессора.  
Это понятно, и я бы не задавал вопросов, будь в строке 1067 произведение двух интов. Но там же инт на дабл - неужели это в несколько десятков раз производительнее, чем дабл на дабл?
 
 25.02.2017 в 14:27:05, Терапевт писал(a):
Для ответа на этот вопрос надо смотреть, какой там получается ассемблерный код, как распараллеливаются инструкции конвеера.
Это вообще реально сделать? Тут я полный чайник :(.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Терапевт
[Кулибин]


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1187
Re: С++ Вопросы и ответы.
« Ответ #226 от 25.02.2017 в 16:40:55 »

25.02.2017 в 15:22:16, Ushwood писал(a):
это-то я знаю. Но r2<diamcore дает true всего в 0.07% случаев (в том конкретном расчете), параметр hardcount - в 50% случаев

Извини, но не знаешь. :)
Если ты поставишь на первое место проверку hardcount, то в 50% случаев до r2<diamcore дело вообще не дойдёт. А ты постоянно первым делом оцениваешь r2<diamcore, что по ресурсоёмкости намного больше простенькой проверки hardcount.
 
 25.02.2017 в 15:22:16, Ushwood писал(a):
Но там же инт на дабл - неужели это в несколько десятков раз производительнее, чем дабл на дабл?
 
Думаю, что в зависимости от точности результата раза в 2-3. Чтобы сказать точнее, нужно поднимать справочную информацию.
 
 25.02.2017 в 15:22:16, Ushwood писал(a):
Это вообще реально сделать?

Например, можно в отладчике посмотреть. Только это тебе мало что даст, без изучения ассемблера и правил оптимизации для распараллеливания команд.
Зарегистрирован

Весна! Я уже не грею пиво! (с) В.Цой
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #227 от 25.02.2017 в 17:32:55 »

25.02.2017 в 16:40:55, Терапевт писал(a):
Например, можно в отладчике посмотреть. Только это тебе мало что даст, без изучения ассемблера и правил оптимизации для распараллеливания команд.  
Ясно. То есть для меня сейчас тупик.
 
 25.02.2017 в 16:40:55, Терапевт писал(a):
Извини, но не знаешь. :)
Если ты поставишь на первое место проверку hardcount, то в 50% случаев до r2<diamcore дело вообще не дойдёт. А ты постоянно первым делом оцениваешь r2<diamcore, что по ресурсоёмкости намного больше простенькой проверки hardcount.
Это я сейчас решил проверить, не откладывая в долгий ящик. И... о сколько нам открытий чудных... : rolleyes :
 
Сделал в каждом из двух вариантов по три тестовых пуска, чтобы нивелировать флуктуации. Привожу для каждого из вариантов результаты, сооветствующие промежуточному общему времени выполнения.
39179eddd67d8767f87cac911c5b51db.jpg
 
1cfb5d47108a0362280ea8763e657867.jpg
 
Ты был прав, второй вариант посчитался быстрее. Среднее время выполнения тестовой задачи 11.5 с против 11.9 с. Но смотри, какую хрень выдает профайлер. Во втором случае на эту самую строку выпадает куда большая доля нагрузки, зато куда меньшая приходится на две предыдущие строки, которые вообще не менялись.
Нагрузка на саму функцию u в обоих вариантах одна и та же, ~50% от общего времени работы программы.
Начинаю подозревать, что профайлер глючит... :(
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Терапевт
[Кулибин]


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1187
Re: С++ Вопросы и ответы.
« Ответ #228 от 25.02.2017 в 18:02:50 »

25.02.2017 в 17:32:55, Ushwood писал(a):
То есть для меня сейчас тупик.

Компиляторы этой фигнёй уже давно сами занимаются. Да и процессоры последовательность выполнения команд тоже умеют сами менять. Не заморачивайся.
 
 25.02.2017 в 17:32:55, Ushwood писал(a):
Начинаю подозревать, что профайлер глючит...  

Вполне возможно. Я вообще не представляю, как это можно оценивать в скомпилированном машинном коде, не засирая код дополнительным кодом. Если код интерпретируемый, как у большинства современных сред, то тогда такая оценка возможна.
Зарегистрирован

Весна! Я уже не грею пиво! (с) В.Цой
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #229 от 25.02.2017 в 18:06:46 »

2Терапевт: в любом случае спасибо за помощь :).
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #230 от 25.02.2017 в 18:41:29 »

2Ushwood:  
Эх, сто лет уже не касался си, не помню уже ничего...
В первую очередь то, что сильно бросается в глаза - у тебя там куча обращений ко внешним и глобальным переменным. Если просто оставить в стороне аксиому, что глобальные переменные - зло, попробуй ради эксперимента передать их хотя бы указателями в тестируемую функцию. Возможно какое-то количество ресурсов тратится на проверки областей видимости и копание в куче тупо при обращении к глобалкам.
Зарегистрирован

ban.gif
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #231 от 25.02.2017 в 18:52:39 »

2Korchy: во, кстати. Много раз слышу в разных вариациях, что глобальные переменные - зло, но не разу не видел внятного объяснения, почему. Может, ты просветишь?
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Терапевт
[Кулибин]


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1187
Re: С++ Вопросы и ответы.
« Ответ #232 от 25.02.2017 в 19:14:07 »

25.02.2017 в 18:52:39, Ushwood писал(a):
Много раз слышу в разных вариациях, что глобальные переменные - зло, но не разу не видел внятного объяснения, почему.

Только с точки зрения читаемости, общей архитектуры программы и контроля содержимого этих переменных.
 
 25.02.2017 в 18:41:29, Korchy писал(a):
Возможно какое-то количество ресурсов тратится на проверки областей видимости и копание в куче тупо при обращении к глобалкам.

Проверка области видимости существует только в рамках логики языка. После компиляции никаких проверок на это нет. Под глобальные переменные память, как правило, выделяется не из кучи (стека), а просто в области данных.
 
 25.02.2017 в 18:41:29, Korchy писал(a):
попробуй ради эксперимента передать их хотя бы указателями в тестируемую функцию.

При этом производительность упадёт, хотя и незначительно (или всёже заметно, если функция вызывается очень часто). Будет тратиться дополнительное время на загон в стек всех переменных функции или указателей на них.
Зарегистрирован

Весна! Я уже не грею пиво! (с) В.Цой
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #233 от 25.02.2017 в 19:17:28 »

25.02.2017 в 19:14:07, Терапевт писал(a):
При этом производительность упадёт, хотя и незначительно (или всёже заметно, если функция вызывается очень часто). Будет тратиться дополнительное время на загон в стек всех переменных функции или указателей на них.  
Вот, собственно, из этих соображений я и предпочитаю передавать в функцию в виде параметров только минимально необходимый набор переменных...
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #234 от 25.02.2017 в 19:25:51 »

25.02.2017 в 19:14:07, Терапевт писал(a):
Проверка области видимости существует только в рамках логики языка. После компиляции никаких проверок на это нет. Под глобальные переменные память, как правило, выделяется не из кучи (стека), а просто в области данных.

Вполне возможно. Наверное уже все позабыл. Прям Дмитрием себя чувствую иногда :)
Но я бы все-таки попробовал бы ради эксперимента.
 
 25.02.2017 в 18:52:39, Ushwood писал(a):
внятного объяснения, почему

Потому, что ты никогда в точке обращения к глобальной переменной не знаешь точно, чему она равна. Потому как ты не знаешь, кто, где и когда ее поменял.
Грубо говоря, назначив глобальную переменную int a = 4. Ты периодически вполне можешь недоумевать, почему где-то в коде условие if(a==4) return true; else return false; упорно возвращает false. И долго и с матюками отыскивать в коде место, где же все-таки меняется значение переменной а.
Зарегистрирован

ban.gif
Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #235 от 25.02.2017 в 19:36:41 »

По реке плывет баржа из села Кукуева
А у нас в селе живут программисты Зуевы
 
гы...
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
Round Owl
[Арбуз]
Прирожденный Джаец

Я люблю этот Форум!




Пол:
Репутация: +125
Re: С++ Вопросы и ответы.
« Ответ #236 от 18.05.2017 в 22:33:59 »

Понадобилось тут переписать небольшой кусок опенсорсного кода на С++, а потом собрать приложение обратно. У меня была установлена Visual Studio 2015 Community, обновил до VS 2017. Поставил Windows SDK, поставил (с бубном) DirectX SDK, всё равно возникают какие-то ошибки. Раньше собирал всё в MinGW и был счастлив. А как вы компилите свой код?
Зарегистрирован

"Now I am become Death, the destroyer of squirrels"
Уникальная методика лечения авиафобии!

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #237 от 21.03.2018 в 16:27:25 »

Возникла тут дурацкая проблема.
У меня сишная программа, работающая с методом Монте-Карло, соответственно много-много-много раз вызывается генератор случайных чисел. И вот я заметил, что через какое-то время работы программа начинает повторяться, т.е. выводить в точности те результаты, которые уже выводила ...надцать минут назад. Т.е. генератор зациклился и пошел выдавать то же самое. Как с этим бороться?  
 
Я испробовал очевидный способ - через сколько-то минут переинициализировать генератор через srand(time(NULL)), но это не помогло.
 
Работаю в Visual Studio 2015, если это имеет значение.
« Изменён в : 21.03.2018 в 16:28:24 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Strax5
[Пятижды пуганый]
Прирожденный Джаец

Дорогу осилит бегущий


Ё-мэйл

Пол:
Репутация: +647
Re: С++ Вопросы и ответы.
« Ответ #238 от 21.03.2018 в 16:44:22 »

2Ushwood: http://www.fourmilab.ch/hotbits/ - теперь и с полонием!
Зарегистрирован

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #239 от 21.03.2018 в 16:54:40 »

2Strax5: выглядит симпатично, но, если я правильно понял их английский, я не генерирую случайные числа у себя, а посылаю тем ребятам запрос на какое-то их количество.
Тут есть маленькая загвоздка: если мне нужно для каждого расчета несколько миллиардов или десятков миллиардов случайных чисел (я не шутил про "много-много-много раз"), у меня тупо будет проблема и с местом на винте для их хранения, со скачиванием этого массива и с производительностью программы.
« Изменён в : 21.03.2018 в 16:55:02 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

pipetz
[пипец всему!]
Прирожденный Джаец

Я очень люблю этот Форум!


Ё-мэйл

Пол:
Репутация: +303
Re: С++ Вопросы и ответы.
« Ответ #240 от 21.03.2018 в 18:44:42 »

21.03.2018 в 16:27:25, Ushwood писал(a):
Т.е. генератор зациклился и пошел выдавать то же самое. Как с этим бороться?  

Может вызывать srand(time(NULL)) перед каждым вызовом rand()?
Одним, словом надо какой-то источник энтропии подмешивать, если тебя не устраивает длинна периода ГПСЧ.
Или как вариант использовать в качестве "случайных" чисел последовательность знаков
какого-либо  
трансцендентного числа, которая заведомо не периодична.  
Зарегистрирован

- Джаец?
- Джаиц, джаиц.
- Ну, джаец, ну погоди!
https://github.com/egorovav/Ja2Project/releases

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #241 от 21.03.2018 в 18:57:30 »

21.03.2018 в 18:44:42, pipetz писал(a):
Может вызывать srand(time(NULL)) перед каждым вызовом rand()?  
Так делать нельзя. Системное время не успеет сдвинуться, и новая инициализация будет тем же числом, что и предыдущая. Переинициализировать надо спустя какое-то время.
 
ЗЫ. Наткнулся на прелюбопытную ссылку, сейчас ее перевариваю: http://en.cppreference.com/w/cpp/numeric/random
Возможно, это то, что мне надо...  
Там упоминается Mersenne Twister - я когда-то читал про него, это очень хороший алгоритм генерации псевдослучайных чисел.
« Изменён в : 21.03.2018 в 19:01:11 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Zed
[SIG edition ;)]
A.I.M.Director

Была такая игра Z


Ё-мэйл

Пол:
Репутация: +532
Re: С++ Вопросы и ответы.
« Ответ #242 от 21.03.2018 в 20:25:31 »

21.03.2018 в 18:57:30, Ushwood писал(a):
Так делать нельзя. Системное время не успеет сдвинуться, и новая инициализация будет тем же числом, что и предыдущая. Переинициализировать надо спустя какое-то время.

Так делать нельзя потому что будет ухудшена случайность распределения.
Как оно работает:
https://pdfs.semanticscholar.org/6b0d/a7c081d9388f304bf6499db373b8d838bb...
А вот по этой ссылке как с этим жить можно жить на Windows
https://msdn.microsoft.com/en-us/library/bb982398.aspx
Зарегистрирован

Кровавый ГБист, душитель свободы.
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #243 от 21.03.2018 в 22:32:38 »

21.03.2018 в 20:25:31, Zed писал(a):
А вот по этой ссылке как с этим жить можно жить на Windows  
Ага, это аналогично тому, на что ссылку я привел выше. И я уже проверил, это работает. Спасибо :).
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

pipetz
[пипец всему!]
Прирожденный Джаец

Я очень люблю этот Форум!


Ё-мэйл

Пол:
Репутация: +303
Re: С++ Вопросы и ответы.
« Ответ #244 от 21.03.2018 в 22:51:40 »

21.03.2018 в 18:57:30, Ushwood писал(a):
Системное время не успеет сдвинуться

Ну это тебе виднее, конечно, успеет у тебя сдвинуться или нет.
 
21.03.2018 в 20:25:31, Zed писал(a):
Так делать нельзя потому что будет ухудшена случайность распределения.  

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

- Джаец?
- Джаиц, джаиц.
- Ну, джаец, ну погоди!
https://github.com/egorovav/Ja2Project/releases

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #245 от 14.05.2018 в 16:45:57 »

21.03.2018 в 20:25:31, Zed писал(a):
А вот по этой ссылке как с этим жить можно жить на Windows
https://msdn.microsoft.com/en-us/library/bb982398.aspx
 
А есть ли какие-нибудь идеи, как с этим можно жить на Линуксе?
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Zed
[SIG edition ;)]
A.I.M.Director

Была такая игра Z


Ё-мэйл

Пол:
Репутация: +532
Re: С++ Вопросы и ответы.
« Ответ #246 от 15.05.2018 в 11:39:32 »

2Ushwood:  
а есть какая то проблема? Где затык то получился?
А так вызывай http://man7.org/linux/man-pages/man2/getrandom.2.html
и радуйся жизни.
Зарегистрирован

Кровавый ГБист, душитель свободы.
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #247 от 20.05.2018 в 14:42:19 »

2Zed: извиняй, что долго не отвечал, просто как-то внезапно стало не до этого.
 
 15.05.2018 в 11:39:32, Zed писал(a):
а есть какая то проблема? Где затык то получился?  
Проблема в том, что то решение, похоже, сугубо для ВижуалСтудии, и при попытке скомпилировать его на линуксе компилятор пишет, что знать не знает такого зверя, как random_device, ну и всех последующих.
 
 15.05.2018 в 11:39:32, Zed писал(a):
А так вызывай http://man7.org/linux/man-pages/man2/getrandom.2.html
и радуйся жизни.  
Это я пока не делал,. потому что см. начало поста. Как сделаю, отпишусь, что такое хорошо и что такое плохо.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #248 от 14.02.2019 в 18:59:54 »

Камрады, помогите, пожалуйста, разобраться с проблемой.
 
Есть вот такой код:
Code:
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
#include <random>
#include <cmath>
 
const int mapsize = 8127;
const int maxboxes1type = 2000000;  // max number of matrix boxes of certain type
 
FILE *in;
int i, j, k;
float *map1aa, *map10, *map1ii, *map1ai, *map1aaai, *map1iiai, *map1aaiiai, *map1h;
int aig[2][mapsize][2], aing[2][mapsize][2];  // 1st index - for different activity thresholds, 3rd - inactive(0)/active(1)
double expr[mapsize];  // sum expression level of all genes in the segment.
double exprnongene[10][mapsize]; // sum expression level of all nongenes in the segment, divided into types.
double cntnum_actinact[2][mapsize][5];  // in 2nd index: 1st field - total length of active genes in the bin, 2nd - of inactive genes, 3rd - of active NONgenes, 4th - of inactive NONgenes, 5th - of empty space
double distr_cnt_type[7][maxboxes1type]; // 1st index: aa, ii, 00, ai, a0, i0, complex
 
void init()
{
      map10 = (float*)malloc(mapsize * mapsize * sizeof(float));
      map1aa = (float*)malloc(mapsize * mapsize * sizeof(float));
      map1ii = (float*)malloc(mapsize * mapsize * sizeof(float));
      map1ai = (float*)malloc(mapsize * mapsize * sizeof(float));
      map1aaai = (float*)malloc(mapsize * mapsize * sizeof(float));
      map1iiai = (float*)malloc(mapsize * mapsize * sizeof(float));
      map1aaiiai = (float*)malloc(mapsize * mapsize * sizeof(float));
      map1h = (float*)malloc(mapsize * mapsize * sizeof(float));
      for (i = 0; i < 2; i++) for (j = 0; j < mapsize; j++) for (k = 0; k < 2; k++) aig[i][j][k] = aing[i][j][k] = 0;
      for (j = 0; j < mapsize; j++) expr[j] = 0;
      for (j = 0; j < mapsize; j++) for (k = 0; k<10; k++) exprnongene[k][j] = 0;
      for (j = 0; j < mapsize; j++) for (k = 0; k < mapsize; k++) {
            *(map10 + j*mapsize + k) = *(map1aa + j*mapsize + k) = -1;
            *(map1ii + j*mapsize + k) = *(map1ai + j*mapsize + k) = -1;
            *(map1aaai + j*mapsize + k) = *(map1iiai + j*mapsize + k) = -1;
            *(map1aaiiai + j*mapsize + k) = *(map1h + j*mapsize + k) = -1;
      }
      for (i = 0; i < mapsize; i++) for (j = 0; j < 5; j++) cntnum_actinact[0][i][j] = cntnum_actinact[1][i][j] = 0;
      for (i = 0; i < maxboxes1type; i++) for (j = 0; j < 7; j++) distr_cnt_type[j][i] = -1;
}
 
int main()
{
      init();
      free(map10);
      free(map1aa);
      free(map1ii);
      free(map1ai);
      free(map1aaai);
      free(map1iiai);
      free(map1aaiiai);
      free(map1h);
}

 
Это небольшой фрагмент моей прграммы (только инициализатор переменных). Прога работала при сравнительно небольших значениях mapsize (около 1000), но с 8000 она вылетает. На 36 строке, вот этой:
*(map1aaai + j*mapsize + k) = *(map1iiai + j*mapsize + k) = -1;
с диагнозом "access violation writing location".
 
Я понимаю, что это какие-то проблемы с памятью, но впервые сталкиваюсь именно с таким их проявлением. Обычно прога либо на стадии компиляции выдает ошибку, что я слишком много памяти прошу, либо вылетает на входе в какую-нибудь функцию со словами "stack overflow".
 
Подскажите, пожалуйста, что конкретно ей не нравится и как с этим можно бороться.
Уменьшить mapsize не вариант, т.е. задача - не уменьшить количество потребляемой памяти (я и так его уменьшил, заменив double на float), а убедить прогу выполняться вот с таким, какое есть.
 
Работаю в Visual Studio 2015.
 
ЗЫ. В первоначальной версии программы все вот эти map1... были двумерными массивами, но там было ровно то же самое: прога компилируется, потом вылетает с этим же диагнозом. Я переписал на указатели в надежде, что поможет, - не помогло.
« Изменён в : 14.02.2019 в 19:04:22 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #249 от 14.02.2019 в 19:04:29 »

Или компилируй как х64, или попробуй включить LARGE_ADDRESS_AWARE в настройках линкера (или компилятора, не помню). Ты создал массивов на больше чем 2ГБ, без LARGE_ADDRESS_AWARE ты можешь обращаться как раз к адресам до двух ГБ.
Зарегистрирован

Don't worry, be happy.
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #250 от 14.02.2019 в 19:47:38 »

2jarni: скомпилировал как х64 - по крайней мере, вот этот тестовый кусочек прошел не пикнув.
Ларчик, как выяснилось, просто открывался.
Спасибо!
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Psyho
[ПсихоПакос :))]
Прирожденный Джаец

Я сказал в морг, значит в морг


Ё-мэйл

Пол:
Репутация: +184
Re: С++ Вопросы и ответы.
« Ответ #251 от 21.02.2019 в 23:41:44 »

2Ushwood: Ты жесток. Используй механизм отображения памяти в файл. А то чую при твоих запросах тебе никакой памяти не хватит. Ибо задачи имеют свойство расширяться :-)
Зарегистрирован

Почему не выпускают швейцарских ножей для сисадмина? Чтоб в наборе крестовая отвертка, флешка, паяльник, обжимник, мини-ствол с одним патроном и гравировкой "себе или главбуху"..
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #252 от 23.02.2019 в 17:07:58 »

21.02.2019 в 23:41:44, Psyho писал(a):
Ты жесток. Используй механизм отображения памяти в файл
Ну я примерно так и делаю, когда размер mapsize переваливает за 10-20 тысяч :). Но это очень негативно сказывается на быстродействии (не могу себе позволить работать полностью на SSD), поэтому если есть возможность этого не делать, стараюсь не делать.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #253 от 14.06.2019 в 18:40:13 »

Сел говнокодить редактор IMP, и возник вопрос.
Там в структуре мерка MERCPROFILESTRUCT имя и ник мерка объявлены как
      UINT16      zName[ NAME_LENGTH ];
      UINT16      zNickname[ NICKNAME_LENGTH ];
то бишь как массивы из unsigned short 16 бит.
Как эту хрень красиво в текст гонять и обратно?
Вроде бы псевдоюникод, но в лоб не хочет.
« Изменён в : 14.06.2019 в 18:41:51 пользователем: ПМ » Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #254 от 14.06.2019 в 18:43:29 »

2ПМ: А что там на самом деле? Если таки юникод, то просто reinterpret_cast используй. Если нет, то напиши 2 функции для конвертации туда/обратно.
Зарегистрирован

Don't worry, be happy.
ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #255 от 14.06.2019 в 18:55:42 »

2jarni:  
typedef unsigned short UINT16;
 14.06.2019 в 18:40:13, ПМ писал(a):
то бишь как массивы из unsigned short 16 бит.  

Гонять надо в строку юникода (поле визуального компонента), и обратно.
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #256 от 14.06.2019 в 18:58:11 »

2ПМ: Не, это я понял. Но что там в этих двух байтах, если не юникод? Не вин1251 ведь.
Зарегистрирован

Don't worry, be happy.
ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #257 от 14.06.2019 в 19:13:04 »

2jarni:  
 
Младший байт - символ, старший 00.
 

Вот прицепился!       IMP-2.jpg
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #258 от 14.06.2019 в 20:01:51 »

2ПМ: Ну, с английскими буквами всё понятно. В памяти лежит как LittleEndian, младшый байт занят. А какие ещё туда символы будут записываться? Русские? Если да, то WIN-1251? То есть так и останеться один байт занят?
 
Если да, то проще всего схлопывать из двух байт в один, а потом пользоваться MultiByteToWideChar\WideCharToMultiByte. Здесь хороший пример: https://www.chilkatsoft.com/p/p_348.asp . Только вместо CP_UTF8, использовать CP_ACP или прямо 1251.
Зарегистрирован

Don't worry, be happy.
Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #259 от 14.06.2019 в 20:29:20 »

2jarni:  
 
О!!! Здрав будь, мОлодец!!!
 
А с обработкой анимаций поможешь ли? Кой-чо автоматизировать? Все доки доступны, и на аглицком.
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #260 от 14.06.2019 в 20:30:41 »

14.06.2019 в 20:01:51, jarni писал(a):
схлопывать из двух байт в один

Как именно, и как потом загонять обратно именно в unsigned short?
 
В примере работа с кодировками строк, а у меня одна половинка именно что не строка.
Как мне эту "не строку" перевести в строковый тип?
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #261 от 14.06.2019 в 20:31:40 »

2Bonarienz:  14.06.2019 в 20:29:20, Bonarienz писал(a):
А с обработкой анимаций поможешь ли?
Разве что советом. Я свою часть в ОП-2.1 никак "доделать" не могу, летняя лень пришла.
Зарегистрирован

Don't worry, be happy.
ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #262 от 14.06.2019 в 20:48:43 »

2jarni:  
Я тормоз. А что я зациклился на оригинальном типе данных? Я же к игре не привязан. Мне главное размерность соблюсти.
Меняю прямо в структуре UINT16 на wchar_t, и все... : idea :
 
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #263 от 14.06.2019 в 20:49:11 »

14.06.2019 в 20:30:41, ПМ писал(a):
Как именно, и как потом загонять обратно именно в unsigned short?
Ну вот так например:
 
Code:
//! ensure that src length <= dst length in items, not bytes
void pack(const uint16_t* src, char* dst)
{
 while (*src)
  *dst++ = (char)(*src++);
 *dst = 0;
}
 
//! ensure that src length <= dst length in items, not bytes
void unpack(const char* src, uint16_t* dst)
{
 while (*src)
  *dst++ = (uint16_t)(*src++);
 *dst = 0;
}

 
Ну или если не брезгуешь лямбдами и STL функциями то так:
Code:

//! uint16_t -> char
std::transform(src, src + strlen(src), dst, [](uint16_t c) -> char { return (char)c; });
//! char -> uint16_t
std::transform(src, src + strlen(src), dst, [](char c) -> uint16_t { return (uint16_t)c; });
Зарегистрирован

Don't worry, be happy.
Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #264 от 14.06.2019 в 20:58:05 »

2ПМ:  
 
Ибо нефих с дитями шалить, кады кодишь!!!
 
2jarni:  
 
Что такое "ОП-2.1"?
 
Речь о java-скриптах или приблудах на Си к фотожопе. Все алгоритмы есть, некоторые неполны, и без спец-модулей не работают - например, обводка только слева черной линией в пиксел контрастного изображения. Как делать ясно, но вот штатных струментофф не хватает, а рук и времени - жалко...
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #265 от 14.06.2019 в 20:59:06 »

2ПМ:  14.06.2019 в 20:48:43, ПМ писал(a):
и все...
Только при условии что там именно юникод и сохранялся.
 
Потому что "джа" в юникоде это "\u0434\u0436\u0430", а в UTF-8 это "d0b4 d0b6 d0b0", те же 3 раза по 2 байта, но контент разный.
Зарегистрирован

Don't worry, be happy.
ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #266 от 14.06.2019 в 21:01:58 »

2jarni:  
Русский текст корректно грузится/сохраняется, и в игре отображается правильно - а мне больше ничего и не надо. Так что это реально эмуляция юникода.
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #267 от 14.06.2019 в 21:02:07 »

2Bonarienz:  14.06.2019 в 20:58:05, Bonarienz писал(a):
а рук и времени - жалко...
А моих рук и времени значиццо не жалко ;D
 
Я в жаба-скрипте только самые примитивные вещи делать могу. На С лучше, конечно. Ты конкретный пример дай.
Зарегистрирован

Don't worry, be happy.
Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #268 от 14.06.2019 в 21:14:04 »

2jarni:  
 
ОК!
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #269 от 14.06.2019 в 21:18:21 »

2Bonarienz:  14.06.2019 в 20:58:05, Bonarienz писал(a):
Что такое "ОП-2.1"?  
Забыл ответить. Мод для Сталкера, Объединённый Пак 2.1. Помогаю там с движком, в частности переводом его на х64.
Зарегистрирован

Don't worry, be happy.
Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #270 от 14.06.2019 в 21:31:12 »

2jarni:  
Уйпля!!!
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #271 от 15.06.2019 в 18:23:22 »

2jarni:  
А вот с кодировкой не английского текста в ITEMDESC.EDT беда, придется все же заморачиваться с приведенным тобой примером. Пичаль...  
 

Вот прицепился!       IMPs.jpg
« Изменён в : 15.06.2019 в 18:29:51 пользователем: ПМ » Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #272 от 15.06.2019 в 18:25:09 »

2ПМ: Ожидаемо. Ну, функции у тебя есть. Пробуй.
Зарегистрирован

Don't worry, be happy.
ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #273 от 15.06.2019 в 20:58:33 »

2jarni:  
Прикрутилось как родное. Еще раз спасибо.
 

 

Вот прицепился!       IMPss.jpg
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #274 от 15.06.2019 в 21:13:04 »

2ПМ: : up :
 
Спасибо большое за новый редактор, всё старое было слишком... старое :).
« Изменён в : 15.06.2019 в 21:13:57 пользователем: jarni » Зарегистрирован

Don't worry, be happy.
Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #275 от 15.06.2019 в 21:29:23 »

2ПМ:  
 
Ты - гигант!
 
НО где аглицкий, фрицевский и лягушатниковый интерфейсы?
 
А майку со штанцами стоит сётаки к благообразию привести... А то фня кака-то невнятная...
 
2jarni:  
 
Ты - тоже гигант!!!
« Изменён в : 15.06.2019 в 21:31:03 пользователем: Bonarienz » Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #276 от 20.06.2019 в 12:03:22 »

15.06.2019 в 21:29:23, Bonarienz писал(a):
А майку со штанцами стоит сётаки к благообразию привести... А то фня кака-то невнятная...  

А оно так в профиле и указано, няп. Ты предлагаешь лишний буфер с обработкой? При том, что любой мод может похерить соответствие?
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #277 от 20.06.2019 в 12:04:33 »

2ПМ: может имеет смысел ИД предмета в скобки загнать, а то 6 ПМ в руках смотрятся несколько сюрреалистически :)
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Green Eyesman
[Добрый волшебник]
Прирожденный Джаец

Иногда мне дико не хватает мозгов.


WWW Ё-мэйл

Пол:
Репутация: +675
Re: С++ Вопросы и ответы.
« Ответ #278 от 20.06.2019 в 12:08:55 »

2ПМ: А можно такой же, но для предметов (или уже есть)?
Зарегистрирован

ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #279 от 20.06.2019 в 12:37:02 »

20.06.2019 в 12:04:33, Artem13 писал(a):
ИД предмета в скобки загнать

Гляну, как будет смотреться. Действительно, пробела маловато будет..
 
 20.06.2019 в 12:08:55, Green Eyesman писал(a):
А можно такой же, но для предметов

Лучше Excel все равно не получится.  :P
Написать такой редактор в принципе можно, но какой в нем смысл? Даже в Метавире совсем другой формат файла ттх.
« Изменён в : 20.06.2019 в 12:37:33 пользователем: ПМ » Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #280 от 20.06.2019 в 12:44:50 »

Да, пожалуй скобочки уместны. Тока квадратные лучше смотрятся.
 

Вот прицепился!       IMP2.jpg
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
Legend
[Переводчик]
Прирожденный Джаец

надА


Ё-мэйл

Пол:
Репутация: +864
Re: С++ Вопросы и ответы.
« Ответ #281 от 20.06.2019 в 13:50:55 »

2ПМ: Имхую, что в ИМПере было логичнее с отдельным окном для ID и отдельным для названия, желательно с алфавитной сортировкой - подсмотрел в ёкселе номер и вбил, или тупо по первым буквам названия нашёл. А то поиск становится уж очень муторным, мышка на колёсико жалуется.
Зарегистрирован

- Удельный вес ядра твоей планеты думай!
- Эээ...

ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #282 от 20.06.2019 в 15:09:16 »

20.06.2019 в 13:50:55, Legend писал(a):
логичнее с отдельным окном для ID

Можно и так.
 20.06.2019 в 13:50:55, Legend писал(a):
желательно с алфавитной сортировкой

А вот это уже никак.
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #283 от 20.06.2019 в 15:54:21 »

2ПМ:  
 
Матрица переходов или матрица соответствия.
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #284 от 20.06.2019 в 16:02:15 »

20.06.2019 в 15:09:16, ПМ писал(a):
А вот это уже никак.  
А разве комбо-бокс не поддерживает сортировку? В С# можно либо включить алфавитную сортировку, либо отсортировать массив значений и сделать его дата-сорсом для комбобокса.
Зарегистрирован

Don't worry, be happy.
ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #285 от 20.06.2019 в 16:27:06 »

2jarni:  
Надо будет посмотреть. Хотя емнип это уже излишество, тем более что в названиях кириллица и латиница весьма вольно используются.
 


Вот прицепился!       IMP2s.jpg
« Изменён в : 20.06.2019 в 16:27:22 пользователем: ПМ » Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #286 от 20.06.2019 в 16:28:35 »

2ПМ:
 20.06.2019 в 16:27:06, ПМ писал(a):
Надо будет посмотреть.
Нафиг, так прекрасно смотрится.
Зарегистрирован

Don't worry, be happy.
Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #287 от 20.06.2019 в 16:37:26 »

2ПМ:  
 
Ну, ёптыть! Ты что, хром на "рюске език"?
 
- Волосы * BROWNHEAD
- Кожа * TANSKIN
- Майка * CamoWestBrowmGr...
- Штаны * CamoWestBrowmG...
 
Это ненормально!!!
 
--------------------------
 
А вот от этого упаль и уписалсо:
 
"Руки" - "ПМ"!!! Видятся радужные флаги на фоне голубого неба...
 
---------------------------
 
Не говоря уже о том, что "Подвижность" - это, па-рюзьке, "Резвость"!!! Как у коника, сиречь у скаковых лошадей...
« Изменён в : 20.06.2019 в 16:41:30 пользователем: Bonarienz » Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
Legend
[Переводчик]
Прирожденный Джаец

надА


Ё-мэйл

Пол:
Репутация: +864
Re: С++ Вопросы и ответы.
« Ответ #288 от 20.06.2019 в 17:21:40 »

2ПМ: "Эволюцию" в "обучение" уже переименуй, а то нифига не понятно, в какую лягушку мерк эволюционировать должен ;D
 
Quote:
"Подвижность" - это, па-рюзьке, "Резвость"
Лучше "резкость". И градации - "к.г.п." (как генерал в погонах), "к.п.ж." (как прапор жилистый), "с.д.ч.в." (сержант дневальному черпаком выдал) и иже с ними =)
Зарегистрирован

- Удельный вес ядра твоей планеты думай!
- Эээ...

Luficer
[Аццкий Сотона]
Прирожденный Джаец

Да, это негр :)


Ё-мэйл

Пол:
Репутация: +318
Re: С++ Вопросы и ответы.
« Ответ #289 от 20.06.2019 в 17:43:17 »

И, кстати, где слюна жука?
 
Хочу слюну жукааааа...
Зарегистрирован

Ночью в тёмных переулках Астаны слышно цоканье копытцев Сотоны.
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #290 от 20.06.2019 в 17:50:03 »

2ПМ: А можешь руки, большие слоты и малые слоты сделать груп-боксами, как Индивидуальность или Инвентарь. Статики занимают слишком много места.
Зарегистрирован

Don't worry, be happy.
ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #291 от 21.06.2019 в 15:21:39 »

20.06.2019 в 16:37:26, Bonarienz писал(a):
Это ненормально!

Это более чем нормально. Это реальные символьные значения, которые не стоит интерпретировать.
 
 20.06.2019 в 17:50:03, jarni писал(a):
руки, большие слоты и малые слоты сделать груп-боксами, как Индивидуальность или Инвентарь

 

Вот прицепился!       IMP3.jpg
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
Legend
[Переводчик]
Прирожденный Джаец

надА


Ё-мэйл

Пол:
Репутация: +864
Re: С++ Вопросы и ответы.
« Ответ #292 от 21.06.2019 в 15:54:17 »

2ПМ: А что значит "рукожоп"? Впервые вижу ;D И зачем номер вещи в название вернул, это же повторение?
Зарегистрирован

- Удельный вес ядра твоей планеты думай!
- Эээ...

ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #293 от 21.06.2019 в 19:22:55 »

21.06.2019 в 15:54:17, Legend писал(a):
рукожоп

На мой взгляд наиболее точно отражает суть оригинального "Badass". Это тот уникум, который из автомата шмаляет с одной руки.
 
 21.06.2019 в 15:54:17, Legend писал(a):
номер вещи в название вернул

Не поверишь, но ориентироваться в списке удобнее.  :P
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
Legend
[Переводчик]
Прирожденный Джаец

надА


Ё-мэйл

Пол:
Репутация: +864
Re: С++ Вопросы и ответы.
« Ответ #294 от 21.06.2019 в 20:16:03 »

2ПМ: Хмм. Рукожоп это у которого руки из той самой жопы, который делает всё через жопу. Badass это что-то совсем другое, кто-то непомерно крутой. Ещё мой словарь выдал "отморозок". Ну а т.к. в игре этот перс стреляет из Баррета с одной руки, то это тупо позер ;D
 
Quote:
ориентироваться в списке удобнее
Я думал таким образом искать нужное просто набирая название. Сейчас оно работает с номерами, т.к. они первые. Причём игнорируя первую скобку :D Вот такой же херни хочется с названием.
Зарегистрирован

- Удельный вес ядра твоей планеты думай!
- Эээ...

ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #295 от 21.06.2019 в 20:34:01 »

21.06.2019 в 20:16:03, Legend писал(a):
просто набирая название

Для этого сначала надо все нахвания лопатить, чтобы латиница и кириллица были строго где надо.
Хм...
Или действительно убрать дублирование номера в описании?
« Изменён в : 21.06.2019 в 21:12:34 пользователем: ПМ » Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
ПМ
[JA'ец. Настоящий. Одна штука :]


Джаец - НОчник




Пол:
Репутация: +704
Re: С++ Вопросы и ответы.
« Ответ #296 от 21.06.2019 в 21:19:06 »

Там всех дел - несколько строчек закомментировать.
 

Вот прицепился!       IMP3s.jpg
Зарегистрирован

Детство без Интернета - это лучшее, что могла подарить нам жизнь.
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #297 от 06.01.2021 в 11:47:06 »

Пытаюсь сейчас построить решение в VS2019 с помощью cmake. Никогда раньше этого не делал и сейчас бы с удовольствием обошелся, но приходится.
(на всякий случай - речь идет о пакете Geant4 под Win10... не думаю, что это сейчас имеет значение.)
 
Так вот. Пишу в командной строке
> cmake --build . --config Release
 
и получаю кукиш следующего содержания:
Quote:
CMake Error:
  Generator
 
    Visual Studio 16 2019
 
  could not find specified instance of Visual Studio:
 
    D:/VS2019

 
Вопрос: какого хрена? Я никогда не устанавливал и не пытался устанавливать VS в эту папку. Она у меня установлена в стандартном месте: C:\Program Files (x86)\Microsoft Visual Studio\2019. Откуда вообще у Цмейка взялась идея искать ее на D, и как объяснить ему, что он неправ?
 
ЗЫ. На всякий случай тупо скопировал папку \2019 на D под этим самым названием, но результат ровно тот же самый.
 
ЗЗЫ. Компонента "Средства CMake C++ для Windows" установлена.
« Изменён в : 06.01.2021 в 11:48:55 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #298 от 06.01.2021 в 11:55:20 »

Посмотри что в PATH у тебя для cmake есть в наличии.
И каежтся, если я еще чего-то помню, cmake можно при установке visual studio установить интегрированный и собирать проект прям из студии.
Зарегистрирован

ban.gif
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #299 от 06.01.2021 в 12:49:20 »

В переменных среды никакого намека на путь d:\vs2019 не обнаружилось.
 
Более того, на cmake.org я нашел вот что:
Quote:

 
VS 2019 supports multiple installations on the same machine. The CMAKE_GENERATOR_INSTANCE variable may be set as a cache entry containing the absolute path to a Visual Studio instance. If the value is not specified explicitly by the user or a toolchain file, CMake queries the Visual Studio Installer to locate VS instances, chooses one, and sets the variable as a cache entry to hold the value persistently.
When CMake first chooses an instance, if the VS160COMNTOOLS environment variable is set and points to the Common7/Tools directory within one of the instances, that instance will be used. Otherwise, if more than one instance is installed we do not define which one is chosen by default.

 
Я обнаружил, что в переменных среды нет переменной VS160COMNTOOLS. Я вписалее туда со значением C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools
Перезагрузил комп и... та же фигня :(.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #300 от 07.01.2021 в 18:11:43 »

Короче, проблему пришлось решать радикально. Я снес Студию, потом заново поставил по этому самому пути.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #301 от 03.09.2021 в 09:01:07 »

Так, други, наступает момент, когда меня принуждают ваять клиент под МЭК61850. В связи с этим вопрос/просьба - кто-то ТСР на Сях программил? Если да - пните в нужном направлении (литература/уроки/т.п.). Желательно русскоязычном. Аглицкий мну напрягает :(
« Изменён в : 03.09.2021 в 09:01:24 пользователем: Artem13 » Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #302 от 03.09.2021 в 09:13:50 »

03.09.2021 в 09:01:07, Artem13 писал(a):
литература/уроки/т.п.

 
У меня была в бумаге такая книжка, там было все достаточно подробно и понятно расписано. У меня конечно было более старое издание, но не думаю что там сильно поменялось:
 
https://www.ozon.ru/product/unix-razrabotka-setevyh-prilozheniy-2881910/...
Зарегистрирован

ban.gif
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #303 от 03.09.2021 в 09:32:55 »

Эм, для виндузятины оно покатит?
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #304 от 03.09.2021 в 09:35:10 »

03.09.2021 в 09:32:55, Artem13 писал(a):
для виндузятины оно покатит?

Вряд-ли. Меня "МЭК61850" смутил, подумал что там линь.
Зарегистрирован

ban.gif
jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++ Вопросы и ответы.
« Ответ #305 от 03.09.2021 в 09:50:51 »

03.09.2021 в 09:01:07, Artem13 писал(a):
кто-то ТСР на Сях программил?
Довольно много но довольно давно :)
 
 03.09.2021 в 09:01:07, Artem13 писал(a):
в нужном направлении
03.09.2021 в 09:32:55, Artem13 писал(a):
виндузятины

https://docs.microsoft.com/en-us/windows/win32/winsock/winsock-reference...
WinSock поддерживает формально как BSD socket API, то есть названия большинства функций такое же (bind, listen, connect, recv, send,...), но если не будешь код портировать на никсы то сразу используй WSA* функции для лучшей читабельности. Это почти всё что тебе нужно. Там у них очень много примеров для каждой функции.
 
Пошаговый мануал что за чем просто гугли, мне вот такой попался: https://firststeps.ru/mfc/net/socket/r.php?1
 
Книжки не порекомендую, учился по мере потребности из и-нета и документации.
Зарегистрирован

Don't worry, be happy.
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #306 от 03.09.2021 в 09:54:32 »

Ок, сенькс. Попробую.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #307 от 30.06.2022 в 15:47:55 »

У меня возник вопрос, который в первый момент показался мне очень простым. Но как только я попытался его решить, выяснилось, что я в упор не понимаю, как.
 
Нужно всего-то навсего написать в сишной программе кусочек, который бы проверял, есть ли директория с заданным именем, и если нет, создавал бы ее.
 
Все элементарно. Если бы не один нюанс.
Эта программа должна быть трансферабельна с винды (visual studio) на линукс и обратно. А все примеры, которыми забит гугл, работают либо только в VS, либо только в линуксе. В результате сейчас в моей программе вот такой кошмар:
Code:
/*if(mkdir("dat")==-1)  // for Windows systems
            printf("Error creating dat directory\n");
      else printf("Dat directory created\n");
      if(mkdir("map")==-1)
            printf("Error creating map directory\n");
      else printf("Map directory created\n");
      if(mkdir("conf")==-1)
            printf("Error creating conf directory\n");
      else printf("Conf directory created\n");*/
 
      if(mkdir("dat",0777)==-1){  // for Linux systems
            printf("Error creating dat directory\n");
            }
            else printf("Dat directory created\n");
      if(mkdir("map",0777)==-1){
            printf("Error creating map directory\n");
            }
            else printf("Map directory created\n");
      if(mkdir("conf",0777)==-1){
            printf("Error creating conf directory\n");
            }
            else printf("Conf directory created\n");

и мне приходится вручную комментировать-раскомментировать нужные блоки всякий раз, когда я переношу прогу с одной системы на другую. И плюс еще в линуксе я каждый раз комментирую //#include <direct.h>, а в винде раскомментирую обратно...
« Изменён в : 30.06.2022 в 15:48:30 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #308 от 30.06.2022 в 15:53:54 »

2Ushwood:  
тупая проверка не поможет?
 
#ifdef _WIN32
// Win
#else
// lin
#endif
Зарегистрирован

ban.gif
Zed
[SIG edition ;)]
A.I.M.Director

Была такая игра Z


Ё-мэйл

Пол:
Репутация: +532
Re: С++ Вопросы и ответы.
« Ответ #309 от 30.06.2022 в 19:10:09 »

30.06.2022 в 15:47:55, Ushwood писал(a):
Эта программа должна быть трансферабельна с винды (visual studio) на линукс и обратно.

https://www.boost.org/doc/libs/1_54_0/libs/filesystem/doc/index.htm
Зарегистрирован

Кровавый ГБист, душитель свободы.
Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #310 от 30.06.2022 в 20:32:48 »

30.06.2022 в 19:10:09, Zed писал(a):
https://www.boost.org/doc/libs/1_54_0/libs/filesystem/doc/index.htm
А ещё лучше сказать, что у нас есть С++17 и не думать про boost
 
А в общем случае Korchy прав, если очень хочется, то системнозависимый код окружают макросами. И тут систем всего-то две.
 
Offtop:
« Изменён в : 30.06.2022 в 20:54:49 пользователем: Lion » Зарегистрирован

Zed
[SIG edition ;)]
A.I.M.Director

Была такая игра Z


Ё-мэйл

Пол:
Репутация: +532
Re: С++ Вопросы и ответы.
« Ответ #311 от 30.06.2022 в 20:58:55 »

30.06.2022 в 20:32:48, Lion писал(a):
А ещё лучше сказать, что у нас есть С++17 и не думать про boost  

Этак можно сказать что у нас есть питон или *список языков с функционалом "из коробки"* и плюсы ненужны :)
Зарегистрирован

Кровавый ГБист, душитель свободы.
Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #312 от 30.06.2022 в 21:05:39 »

2Zed: Ну зависит от задачи. Для некоторых задач проще действительно взять питон. Если выбирать между добавлением буста и апгрейдом стандарта, я бы сначала смотрел, можно ли дёшево сделать второе.
 
А так питон, конечно, многим хорош (особенно с аннотациями типов), только медленно и памяти много идёт.
« Изменён в : 30.06.2022 в 21:09:25 пользователем: Lion » Зарегистрирован

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #313 от 01.07.2022 в 11:58:56 »

2Korchy:  
2Zed:  
Спасибо, попробую.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

JAggernaut
[Сын батьки Махно]
Прирожденный Джаец

Он же Махновский




Пол:
Репутация: +135
Re: С++ Вопросы и ответы.
« Ответ #314 от 07.12.2022 в 02:01:22 »


Вот прицепился!       photo_2022-12-07_01-33-58.jpg
Зарегистрирован

Мод JA2 "Солдаты Анархии": http://forum.ja2.su/cgi-bin/yabb/YaBB.pl?board=ja2v113;action=display;num=1461950373;start=0#0
Видеоканал: www.youtube.com/playlist?list=PLfiTd_jX0ZXcL5mOEXr7t3u3Mygzqbzzp

Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #315 от 07.12.2022 в 13:35:53 »

2JAggernaut:  
 
Инкапсулированные говнокодеры...
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #316 от 08.02.2023 в 17:31:09 »

У меня в одной из сишных программ возникла какая-то дурацкая ошибка, с которой я никогда раньше не встречался.
Программа отказывается открывать текстовый файл для записи.
Файловая переменная равна NULL, и программа вылетает.
Что я перепробовал (следы этого частично видны на скрине выше):
- менял имя файла на какое-то совершенно безобидное;
- менял путь (текущая директория, корень разных дисков; место везде есть);
- пытался открывать через fopen или через fopen_s;
- файловую переменную задавал как локальную или глобальную;
- работал в режиме debug и release;
- перезагружал Студию, делал полный ребилд проекта (знаю, иногда сама Студия глючит, тогда эти меры обычно помогают);
- позакрывал большую часть приложений, так что у меня свободно 7 гигов оперативки, а сама программа жрет 200 мегов.
Все это ничего не поменяло :(.
 
Я в тупике. Не понимаю, в чем ЕЩЕ может быть проблема.
 
ЗЫ. Visual Studio 2015.
Вот прицепился!       open_error.jpg
« Изменён в : 08.02.2023 в 17:40:59 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #317 от 08.02.2023 в 18:49:57 »

путь абсолютным попробовать задать?
Зарегистрирован

ban.gif
pipetz
[пипец всему!]
Прирожденный Джаец

Я очень люблю этот Форум!


Ё-мэйл

Пол:
Репутация: +303
Re: С++ Вопросы и ответы.
« Ответ #318 от 08.02.2023 в 19:08:05 »

08.02.2023 в 18:49:57, Korchy писал(a):
путь абсолютным попробовать задать?

Или может прав нет на запись. Запустить от имени администратора.
Зарегистрирован

- Джаец?
- Джаиц, джаиц.
- Ну, джаец, ну погоди!
https://github.com/egorovav/Ja2Project/releases

Терапевт
[Кулибин]


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1187
Re: С++ Вопросы и ответы.
« Ответ #319 от 08.02.2023 в 20:55:05 »

08.02.2023 в 17:31:09, Ushwood писал(a):
Файловая переменная равна NULL, и программа вылетает.

Это fopen возвращает NULL, что свидетельствует об ошибке.
Попробуй получить информацию об ошибке с помощью функции GetLastError().
https://learn.microsoft.com/ru-ru/windows/win32/debug/retrieving-the-las...
Зарегистрирован

Весна! Я уже не грею пиво! (с) В.Цой
pipetz
[пипец всему!]
Прирожденный Джаец

Я очень люблю этот Форум!


Ё-мэйл

Пол:
Репутация: +303
Re: С++ Вопросы и ответы.
« Ответ #320 от 08.02.2023 в 21:46:34 »

У меня такая прога отработала.
Разработал в блокноте, компилировал GNU gcc версии 6.3.0.
 
08.02.2023 в 20:55:05, автор писал(a):

#include <stdio.h>
 
int main() {
      output();
      return 0;
}
 
void output() {
      
      FILE *out2;
      out2 = fopen("out.dat", "w");
      fputs("Hello, World!", out2);
      fclose(out2);
}
« Изменён в : 08.02.2023 в 21:47:43 пользователем: pipetz » Зарегистрирован

- Джаец?
- Джаиц, джаиц.
- Ну, джаец, ну погоди!
https://github.com/egorovav/Ja2Project/releases

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #321 от 08.02.2023 в 22:43:18 »

08.02.2023 в 18:49:57, Korchy писал(a):
путь абсолютным попробовать задать?
И абсолютным (там в предыдущих строках это видно), и относительным.
 08.02.2023 в 21:46:34, pipetz писал(a):
У меня такая прога отработала.
Естественно. Она и должна была отработать. Я пытаюсь понять, что могло пойти не так, из-за чего она не отработала у меня.  
Естественно, кусок, который я привел, - это не вся программа. Но я понятия не имею, что в других ее местах могло привести к несрабатыванию в этом месте.
 08.02.2023 в 19:08:05, pipetz писал(a):
Или может прав нет на запись.
Есть права на запись. Собственно, эта же программа ранее (из другой функции) благополучно открыла файл на запись.
 
 08.02.2023 в 20:55:05, Терапевт писал(a):
Попробуй получить информацию об ошибке с помощью функции GetLastError().
Спасибо, попробую.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

pipetz
[пипец всему!]
Прирожденный Джаец

Я очень люблю этот Форум!


Ё-мэйл

Пол:
Репутация: +303
Re: С++ Вопросы и ответы.
« Ответ #322 от 08.02.2023 в 22:59:08 »

08.02.2023 в 22:43:18, Ushwood писал(a):
Я пытаюсь понять, что могло пойти не так, из-за чего она не отработала у меня.  

Пришли расшифровку ДНК.  ;D
Зарегистрирован

- Джаец?
- Джаиц, джаиц.
- Ну, джаец, ну погоди!
https://github.com/egorovav/Ja2Project/releases

Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #323 от 08.02.2023 в 23:20:24 »

2Ushwood: Стоит попробовать получить код ошибки, как уже писал Терапевт.
Кроме того может иметь смысл запускать программу не из студии.
Ещё я бы проверил, что не происходит нескольких подряд попыток открыть один и тот же незакрытый файл.
Зарегистрирован

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #324 от 09.02.2023 в 17:34:13 »

08.02.2023 в 20:55:05, Терапевт писал(a):
Попробуй получить информацию об ошибке с помощью функции GetLastError().
https://learn.microsoft.com/ru-ru/windows/win32/debug/retrieving-the-las....
 
То ли лыжи не едут... : rolleyes :
Вставил функцию по этой ссылке в начало программы, вставил строку
if(!GetProcessId(NULL))
   ErrorExit(TEXT("GetProcessId"));
после того самого fopen, запустил ииии... прога вылетела внутри этой самой функции.
 

Вот прицепился!       open_error2.jpg
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #325 от 09.02.2023 в 19:01:55 »

Следующая серия.
В попытке обойти проблему я убрал эту функцию вообще, открыл файл на запись в самом начале программы (и закрыл в самом конце). Прога немного поработала, потом вылетела с сообщением "Куча была повреждена".
Чувствую, теперь я буду дооолго искать, где именно и что я натворил с кучей...
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Терапевт
[Кулибин]


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1187
Re: С++ Вопросы и ответы.
« Ответ #326 от 09.02.2023 в 19:03:06 »

2Ushwood:
Нужно было вызвать ErrorExit(TEXT("output")) после out2 = fopen("out.dat", "w");
Но чтобы не разбираться с возникшей ошибкой, напиши вызов так
...
out2 = fopen("out.dat", "w");
DWORD dw = GetLastError();
...
и посмотри отладчиком, какой код будет в dw. Расшифровка кодов тут:
https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes...
Зарегистрирован

Весна! Я уже не грею пиво! (с) В.Цой
Терапевт
[Кулибин]


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1187
Re: С++ Вопросы и ответы.
« Ответ #327 от 09.02.2023 в 19:34:30 »

09.02.2023 в 19:01:55, Ushwood писал(a):
Прога немного поработала, потом вылетела с сообщением "Куча была повреждена".

Похоже на результат бесконтрольного рекурсивного (сама себя) вызова какой-то функции.
Зарегистрирован

Весна! Я уже не грею пиво! (с) В.Цой
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #328 от 10.02.2023 в 12:42:08 »

Рекурсивных функций у меня нет. А вот динамические массивы есть, и имел место выход за границы одного из них.
Дело раскрыто. Спасибо всем, кто помогал :).
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Терапевт
[Кулибин]


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1187
Re: С++ Вопросы и ответы.
« Ответ #329 от 10.02.2023 в 13:03:52 »

10.02.2023 в 12:42:08, Ushwood писал(a):
А вот динамические массивы есть

Очень интересно. Только в Си нет готовых динамических массивов. Подобные штуки реализуются вручную через динамическое выделение памяти с помощью malloc().
Зарегистрирован

Весна! Я уже не грею пиво! (с) В.Цой
Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #330 от 10.02.2023 в 13:07:08 »

2Ushwood:  
 
Лучше быть олигофреном
И пить водддку прям с утра
Чем складАть олигомеры
В динамический массив!..
 
2Терапевт:  
 
Он же хымик, а не софтюк...
« Изменён в : 10.02.2023 в 13:09:31 пользователем: Bonarienz » Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
Терапевт
[Кулибин]


Народный целитель. Шарлатан высшей категории.




Пол:
Репутация: +1187
Re: С++ Вопросы и ответы.
« Ответ #331 от 10.02.2023 в 13:25:19 »

10.02.2023 в 13:07:08, Bonarienz писал(a):
Он же хымик, а не софтюк...

Одно другому не мешает. Я тоже профессионально никогда на Си не писал. Для меня это хобби.
Зарегистрирован

Весна! Я уже не грею пиво! (с) В.Цой
Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #332 от 10.02.2023 в 15:13:12 »

2Терапевт:  
 
СиКуЭльщик нищасный!
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #333 от 10.02.2023 в 18:18:19 »

10.02.2023 в 13:03:52, Терапевт писал(a):
Подобные штуки реализуются вручную через динамическое выделение памяти с помощью malloc().  
Именно так и делал.
Зарегистрирован

Мои текущие переводы:
Червь арка 30, версия 24.03.24

Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #334 от 10.02.2023 в 19:44:48 »

2Ushwood:  
 
"Уж вы там добалуетесь, уж вы доизвлекаетесь!.."
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
Zed
[SIG edition ;)]
A.I.M.Director

Была такая игра Z


Ё-мэйл

Пол:
Репутация: +532
Re: С++ Вопросы и ответы.
« Ответ #335 от 10.02.2023 в 20:48:53 »

2Bonarienz:  
Завидуй молча.
Зарегистрирован

Кровавый ГБист, душитель свободы.
Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #336 от 10.02.2023 в 22:58:05 »

2Zed:  
 
Товарищ Председатель! Мы не завидуем (никогда и никому!), мы неспешно грызем Яву. И фильтр, и язык (sic!)...
 
И ужо понимаем про инкапсуляцию - ведь олигомеры - это именно она... По ЗСЭ...
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
Страниц: 1     « Открыть сокрытое! » Послать Тему Послать Тему Печатать Печатать

« Предыдущая Тема | Следующая Тема »

Статистика. Размер данных: 890674 GZip: off
A.I.M. » Powered by YaBB Modification 4 (v.4.0.0-pre)!
YaBB © 2000-2003. All Rights Reserved.