-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80




Форум на Исходниках.RU


Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://forum.sources.ru.
Данный дневник сформирован из открытого RSS-источника по адресу http://forum.sources.ru/yandex.php, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

Генерация размещений

Пятница, 08 Января 2021 г. 07:22 + в цитатник
mkudritsky:
Цитата Qraizer @
На сочетания есть простой рекурсивный алгоритм, размещения из каждого сочетания получаются пермутациями. Не уверен в эффективности, но работае

Правильно делаете, что не уверены в эффективности рекурсии!
При решении другой комбинаторной задачи мы выявили, что рекурсия минимум в 3 раза уменьшает скорость работы программы.

P.S. В этой связи мы, например, переписали стандартный алгоритм поиска файлов по маске в файловой системе.
Убрали рекурсию и сделали все без рекурсии.
Эффективностью нового алгоритма не нарадуемся!

https://forum.sources.ru/index.php?showtopic=419935&view=findpost&p=3843433


Метки:  

Генерация случайных чисел по нормальному закону распределения

Пятница, 08 Января 2021 г. 07:03 + в цитатник
mkudritsky: Обращаю внимание, что любимая Windows (даже Win 10) осталась в плане датчика генерации случайных чисел на уровне начала 1990-х годов.
Здесь RAND_MAX = 32767 = 2**15-1. Между тем, как в любой нормальной ОС RAND_MAX = 2**31-1.
Поэтому лично я использую ниже приведенный комплект программ для равномерной (не нормальной!) генерации случайных чисел.
Обратите на это внимание, если не устроит работа датчика нормально распределенных чисел.
    //---------------------------------------------------------------------------
    int iRand() {
    // Аналог rand() для юродиевых версий "любимой" Windows, где RAND_MAX=32767
    int iR=rand();
    if ( RAND_MAX == 32767 ) { // 32767=2**15-1
    iR <<= 15; // iR = iR*32768 (32768=2**15)
    int iL = rand();
    iR |= iL; // iR = rand()*(2**15)+rand;
    }
    return iR;
    }
    //---------------------------------------------------------------------------
    int iRandom(int iMin, int iMax) {
    // Возвращает случайное целое число между iMin и iMax. Границы могут генерироваться
    if (iMin < iMax)
    return iMin + iRand() % (iMax - iMin + 1);
    else if ( iMin == iMax )
    return iMin;
    else
    return iMin - 1; // Если границы заданы неверно, то возвращается такое число
    }
    //---------------------------------------------------------------------------
    double dbRandom(double dbMin, double dbMax) {
    // Возвращает случайное вещественное число между dbMin и dbMax. Границы могут генерироваться
    if (dbMin < dbMax) {
    if (RAND_MAX == 32767)
    return dbMin + ((dbMax - dbMin) * (double)iRand()) / 1073741823.0; // = double(2**30-1)
    else
    return dbMin + ((dbMax - dbMin) * (double)iRand()) / (double)RAND_MAX;
    }
    else if (dbMin == dbMax)
    return dbMin;
    else
    return dbMin - 1.0;
    }
    //---------------------------------------------------------------------------

https://forum.sources.ru/index.php?showtopic=420883&view=findpost&p=3843432


Метки:  

Прозрачный компонент под анимацией

Среда, 06 Января 2021 г. 16:09 + в цитатник
Syslik: Всем привет. Не могу добиться желаемого результата для анимированной картинки с прозрачным задним планом (типа курсора мыши) для отображения хода выполнения запроса в программе.
Один из вариантов, рисование на потомке TPanel (пробовал сразу на TPaint и на форме - не получается, или я не мог понять из прочитанного :) )
    //---------------------------------------------------------------------------
    #include
    #pragma hdrstop
    #include "WaitBoxUnit.h"
    #include "math.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    __fastcall WImagePn::WImagePn(TComponent* Owner): TPanel(Owner)
    {
    this->Parent = dynamic_cast(Owner);
    this->Width = 40;
    this->Height = 40;
    this->BorderWidth = 0;
    this->BorderStyle = bsNone;
    this->BevelOuter = bvNone;
    this->BringToFront();
    Images = new TPngImage;
    ShadowImages = new Graphics::TBitmap();
    ShadowTemplate = new Graphics::TBitmap();
    MImageCounter = 0;
    MType = tSnake;
    SetImageType(MType);
    Timer = new TTimer(Owner);
    Timer->Enabled = true;
    Timer->Interval = 1000;
    Timer->OnTimer = OnTimer;
    }
    //---------------------------------------------------------------------------
    __fastcall WImagePn::~WImagePn()
    {
    delete ShadowImages;
    delete ShadowTemplate;
    delete Timer;
    delete Images;
    }
    //---------------------------------------------------------------------------
    void __fastcall WImagePn::Paint()
    {
    TPanel::Paint();
    try {
    BitBlt(ShadowTemplate->Canvas->Handle, 0,0,40,40, ShadowImages->Canvas->Handle, (MImageCounter * 40), 0, SRCCOPY);
    TPanel::Canvas->Draw(0, 0, ShadowTemplate);
    } __finally {
    }
    }
    //---------------------------------------------------------------------------
    void __fastcall WImagePn::OnTimer (TObject *Sender)
    {
    MImageCounter ++;
    if (MImageCounter > 7)
    MImageCounter = 0;
    this->Invalidate();
    Application->ProcessMessages();
    }
    //---------------------------------------------------------------------------
    void __fastcall WImagePn::SetImageType(MImageType Value)
    { String UImageName;
    MType = Value;
    if (MType == tSnake) UImageName = "WAIT_IMAGE_01";
    else if (MType == tFadingBalls) UImageName = "WAIT_IMAGE_02";
    else if (MType == tRainbow) UImageName = "WAIT_IMAGE_03";
    else UImageName = "WAIT_IMAGE_04";
    TResourceStream *RcStream = new TResourceStream(unsigned(HInstance), UImageName, L"RT_RCDATA");
    try {
    Images->LoadFromStream(RcStream);
    ShadowImages->Assign(Images);
    ShadowTemplate->Assign(Images);
    ShadowTemplate->SetSize(40, 40);
    } __finally {
    delete RcStream;
    }
    this->Invalidate();
    }
    //---------------------------------------------------------------------------
    int __fastcall WImagePn::GetInterval()
    {
    return Timer->Interval;
    }
    //---------------------------------------------------------------------------
    void __fastcall WImagePn::SetInterval(int Value)
    {
    Timer->Interval = Value > 0 ? Value: 1000;
    }
    //---------------------------------------------------------------------------

ну и сам хеадер
    //---------------------------------------------------------------------------
    #ifndef WaitBoxUnitH
    #define WaitBoxUnitH
    //---------------------------------------------------------------------------
    #include
    #include
    #include
    //---------------------------------------------------------------------------
    enum MImageType {tSnake, tFadingBalls, tRainbow, tBrokenCircle};
    class PACKAGE WImagePn : public TPanel // TCustomPanel
    {
    private:
    TTimer *Timer;
    MImageType MType;
    int MImageCounter;
    TPngImage *Images;
    Graphics::TBitmap *ShadowImages;
    Graphics::TBitmap *ShadowTemplate;
    protected:
    virtual void __fastcall Paint(void);
    int __fastcall GetInterval();
    void __fastcall SetInterval(int Value);
    void __fastcall SetImageType(MImageType Value);
    void __fastcall OnTimer (TObject *Sender);
    public:
    virtual __fastcall WImagePn(TComponent* Owner);
    virtual __fastcall ~WImagePn();
    __published:
    __property int Speed = {read = GetInterval, write = SetInterval};
    __property MImageType Type = {read = MType, write = SetImageType};
    };
    //---------------------------------------------------------------------------
    #endif


Все нормально рисуется, только задний фон - не прозрачный. Создавал компонент TPaintBox и рисовал на нем, но подменить вывод на канву панели с сохранением прозрачности не добился, также пробовал создать потомка TPaintBox - аналогично, потом формы и рисовать на ней - тот же результат. В какую сторону "копать"? Огромное спасибо за любой совет (или ответ), а то другой день ломаю голову.

https://forum.sources.ru/index.php?showtopic=421072&view=findpost&p=3843419


Метки:  

If+Else VS Switch+Case.

Вторник, 05 Января 2021 г. 16:32 + в цитатник
Dushevny:
Цитата Mr.Delphist @
потому что оно переводится в те же ассемблерные команды условного перехода (jz/jnz и т.п.).
Если значения меток идут подряд - вменяемый компилятор с включенной оптимизацией вставляет табличный переход. Если часть идет не подряд - сначала вставляются jz/jnz на эти "не подряд", а в конце - табличный переход для оставшихся "подряд". Хороший оптимизатор может то же самое сделать и из кучи if-else, так что выбор остается за программистом - какой из вариантов записи лучше отражает задумку автора в конкретном месте программы. У меня, например, кое-где для лучшей читаемости используется switch с одной-единственной меткой case.

https://forum.sources.ru/index.php?showtopic=421069&view=findpost&p=3843404


Метки:  

If+Else VS Switch+Case.

Вторник, 05 Января 2021 г. 15:47 + в цитатник
Mr.Delphist: Быстрее if-else оно не будет, потому что оно переводится в те же ассемблерные команды условного перехода (jz/jnz и т.п.).

"case" без "break" может быть замечено компилятором как warning

https://forum.sources.ru/index.php?showtopic=421069&view=findpost&p=3843403


Метки:  

If+Else VS Switch+Case.

Вторник, 05 Января 2021 г. 13:50 + в цитатник
Сергей85: Только ли для удобства придумали Switch+Case?

Непохоже, чтобы он был быстрее обычного If-Else. Меньше кода? Возможно, но Case требует дополнительного break, который если забыть - компилятор не заметит, и логика работа case нарушится.

https://forum.sources.ru/index.php?showtopic=421069&view=findpost&p=3843401


Метки:  

Гоночная игра в стиле ранних NFS.

Вторник, 05 Января 2021 г. 12:27 + в цитатник
Mikle: Залил полный исходник в п.1

https://forum.sources.ru/index.php?showtopic=420665&view=findpost&p=3843398


Метки:  

Новогодний юмор

Понедельник, 04 Января 2021 г. 21:25 + в цитатник

Метки:  

Новогодний юмор

Понедельник, 04 Января 2021 г. 21:19 + в цитатник

Метки:  

catch (std::bad_alloc& ba) в MFC приложении не работает.

Воскресенье, 03 Января 2021 г. 18:42 + в цитатник
sharky72: MFC исключения бросаются по указателю. Обратите внимание как написаны макросы TRY CATCH

    catch (CMemoryException* mex)
    {
    AfxMessageBox(_T("Сработал CMemoryException ошибка выделения памяти для массива "));
    mex->Delete();
    }

https://forum.sources.ru/index.php?showtopic=421011&view=findpost&p=3843386


Метки:  

Мерцание progressBar1> при уменьшении значения progressBar1.position.

Воскресенье, 03 Января 2021 г. 17:41 + в цитатник

Метки:  

Мерцание progressBar1> при уменьшении значения progressBar1.position.

Воскресенье, 03 Января 2021 г. 17:05 + в цитатник
RusSun: Доброе время суток.
Всех с новым годом!!! :D
Теперь тема.
Мерцание progressBar1 при уменьшении значения progressBar1.position.

Когда progressBar1 "идёт" заполняется от меньшего значения к большему, то всё хорошо работает.

Про экспериментировал. Что если значение, после роста до progressBar1.Max, будет уменьшаться до 1.
Когда идет уменьшение значения, то видно не вооруженным взглядом, что progressBar1 "дергается и мерцает".
Почти не заметно на значении 10k и менее.
У меня progressBar1.Max = 100k
progressBar1.Min = 1
шаг 1k

Примечание k = 1000.

Mainform:

    unit Unit1;
    interface
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls,ThreadUnit, ComCtrls;
    type
    TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    ProgressBar1: TProgressBar;
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    var
    Form1: TForm1;
    Thread :TMyThread;
    FlagThreadStop: boolean = False;
    implementation
    {$R *.dfm}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    FlagThreadStop:= not FlagThreadStop;
    if FlagThreadStop then
    begin
    Thread.Resume;
    Button1.Caption:= 'Stop It'
    end
    else
    begin
    Thread.Suspend;
    Button1.Caption:= 'Run Thread'
    end;
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Thread:= TMyThread.Create(true);
    Thread.Priority := tplower;
    //Thread.Priority := tpNormal;
    //Thread.FreeOnTerminate:=True; //Это ошибочное действие
    Thread.Resume;
    Thread.Suspend
    end;
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    ////Возобновим поток если они приостановлен
    if Thread.Suspended then Thread.Resume;
    //Посылаем требование завершиться
    Thread.Terminate;
    //Уничтожаем объект
    Thread.Free;
    //Закрываем приложение
    Form1.Close;
    end;
    initialization
    ReportMemoryLeaksOnShutdown := True;
    end.


Thread
    unit ThreadUnit;
    interface
    uses
    Classes,sysUtils;//,windows,messages
    type
    TMyThread = class(TThread)
    //const
    // WM_MyMsg = WM_User + 1;
    private
    index:integer;
    flag: boolean;
    procedure Updatelabel;
    { Private declarations }
    protected // public
    procedure Execute; override;
    end;
    implementation
    uses unit1;//обязательно
    { Tcountobj }
    procedure TMyThread.Updatelabel;
    begin
    Form1.label1.Caption:= Inttostr(index);
    Form1.ProgressBar1.Position:= index
    // PostMessage(Form1.ProgressBar1.Handle, WM_MyMsg, Form1.ProgressBar1.Max, index);
    // Application.Processmessages;
    end;
    { TMyThread }
    procedure TMyThread.Execute;
    begin
    inherited;
    index:=1;
    flag:= False;
    while terminated = False do
    begin
    //заполняем бесконечный счётчик
    while index>0 do
    begin
    //Вот эта проверка даёт быстрый выход из цикла !!!
    if Thread.Terminated then break;
    Synchronize(Updatelabel);
    if not flag then
    Inc(index)
    else
    begin
    //sleep(1);
    //Form1.ProgressBar1.StepIt;
    dec(index);
    end;
    if index > 100000 then
    begin
    index:=100000;
    flag:= true;
    //Form1.ProgressBar1.StepIt;
    end;
    end;
    end;
    end;
    end.


Конечно, можно обойтись
    ...
    (* вариантом *) sleep(1);
    dec(index) // где "index в потоке уменьшается"
    ...

Мерцание и дергание уменьшится. (но соответственно появляется задержка)

Мне кажется, что должно быть более грамотное решение. :scratch: :facepalm:

Мой вопрос: Как уменьшить или совсем убрать мерцание и дергание прогрессбара при
уменьшении значения progressBar1.position -> "progressBar1.Max до progressBar1.Min" ?

В некоторых программах, я видел, тоже были прогрессбары
и "движение справа налево" осуществлялось плавно, без рывков и скачков. :huh:

Заранее :thanks:
TestThread2.rar (, : 2)

https://forum.sources.ru/index.php?showtopic=421065&view=findpost&p=3843384


Метки:  

А с чего все началось то ?

Воскресенье, 03 Января 2021 г. 04:32 + в цитатник
sototron279loogy: Автор начал интересную тему, как только приду домой прикреплю скрин в подтверждение его слов. Но на текущий момент могу сказать, что ситуация улучшилась .

https://forum.sources.ru/index.php?showtopic=421061&view=findpost&p=3843380


Метки:  

Скроллинг меню

Суббота, 02 Января 2021 г. 03:38 + в цитатник

Метки:  

Кошечки

Четверг, 31 Декабря 2020 г. 23:27 + в цитатник
vot: Из adme.ru:
Цитата
Все владельцы кошек знают: их настроение и желания меняются, как погода в Лондоне. Только сейчас они хотели одного, а через секунду могут потребовать совсем другого. Подобных ситуаций так много, что мы собрали целый комикс о необузданной натуре кошек.

catmood1.jpg (, : 45)
catmood2.jpg (, : 44)
catmood3.jpg (, : 43)
catmood4.jpg (, : 43)
catmood5.jpg (, : 42)
catmood6.jpg (, : 42)
catmood7.jpg (, : 43)
catmood8.jpg (, : 41)
catmood9.jpg (, : 42)
catmood10.jpg (, : 42)

https://forum.sources.ru/index.php?showtopic=133989&view=findpost&p=3843355


Метки:  

Новогодний юмор

Четверг, 31 Декабря 2020 г. 18:54 + в цитатник

Метки:  

Скроллинг меню

Четверг, 31 Декабря 2020 г. 11:31 + в цитатник

Метки:  

Мерцание PopupMenu

Четверг, 31 Декабря 2020 г. 11:30 + в цитатник
estra: Если тема кому-то интересна, то вот что в итоге получилось.

https://forum.sources.ru/index.php?showtopic=421015&view=findpost&p=3843329


Метки:  

Скорость при записи потоком wofstream меньше скорости записи Windows 10

Среда, 30 Декабря 2020 г. 18:59 + в цитатник
shm: Копирование гигабайтами - это бред. Буфер больше 16Мб не имеет смысла делать. В теории для некоторых SSD может помочь распараллеливание: один поток пишет текущую порцию данных, а другой в это время уже считывает следующую.

Добавлено
По поводу отдельных операций я бы для начала сделал порционное чтение файла блоками. Внезапно, скорость может возрасти и тому есть объективные причины.

Добавлено
Можно отобразить файл на память, некоторые люди утверждаю, что для Винды это самый быстры способ прочитать все данные (не проверял).

https://forum.sources.ru/index.php?showtopic=421051&view=findpost&p=3843306


Метки:  

Округление данных при помещении в поток.

Среда, 30 Декабря 2020 г. 16:59 + в цитатник
Qraizer: Нет. Это МССтудия 2017-ой пробы. Можешь проверить МИНГВой, будет то же.

https://forum.sources.ru/index.php?showtopic=421054&view=findpost&p=3843300


Метки:  

Поиск сообщений в rss_forum_sources_ru
Страницы: 2628 ... 2480 2479 [2478] 2477 2476 ..
.. 1 Календарь