Нужна помощь профессионального программиста - страница 8

 

А вообще, кто-нибудь здесь понимает, что такое ВИРТУАЛЬНАЯ ПАМЯТЬ 

Оперативная, например ... 

 
Алексей Тарабанов #:

А вообще, кто-нибудь здесь понимает, что такое ВИРТУАЛЬНАЯ ПАМЯТЬ 

Оперативная, например ... 

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

Только какое это тут имеет значение.

 
JRandomTrader #:

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

Только какое это тут имеет значение.

Нет, просто Clavm0 и Сlavm1 - переменные окружения. 

Нет? 

 

Кстати, 2 Гб  

 
JRandomTrader #:

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

Только какое это тут имеет значение.

Могу спать лечь? 

 
Алексей Тарабанов #:

А вообще, кто-нибудь здесь понимает, что такое ВИРТУАЛЬНАЯ ПАМЯТЬ 

Оперативная, например ... 

vm

2Гб очень мало, чем меньше оперативной памяти - тем больше нужен файл подкачки.

Похоже у вас и винт забит под завязку.

Спокойной ночи)
 

Привет!

А кто-нибудь юзал в Финаме Высокоскоростной Transaq?

https://www.finam.ru/howtotrade/soft/high-speed-transaq/

 
prostotrader #:

Привет!

А кто-нибудь юзал в Финаме Высокоскоростной Transaq?

https://www.finam.ru/howtotrade/soft/high-speed-transaq/

Не использовал. Прочел рекламное описание и сложилось ощущение, что торговая программа будет работать не на сервере, а лишь команды будут через этот шлюз, плюс в поддержен API.

 
Syomkin Aleksandr #:
Добрый день. Подскажите пожалуйста тему, в которой можно оставить предложение по работе к MQL4 программисту на обслуживание потока заказов. У кого есть портфолио желание и возможность работать в подобном формате, присылайте портфолио на ваши работы в личных сообщениях. Спасибо

Вот сюда

Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • 2023.04.03
  • www.mql5.com
Самый большой фриланс c разработчиками программ на MQL5
 

Всем привет!

Столкнулся с необычной проблемой.

MDI приложение много дочерних окон, когда создается дочернее окно, то его хендл сохраняется.

CurChild.FExpert.FEHandle:= CurChild.Handle;

Далее, при обработке входящих данных, отсылается PostMessage() в дочернее окно, чтобы инициировать OnTick

if(Topic = 'spot') then
      begin
        for i:= 0 to Length(M_Data.Topics) - 1 do
        begin
          if(Topic = M_Data.Topics[i].Name) then  //topic fouund
          begin
            if(Cells.Top >= M_Data.Topics[i].Table.RowCount) then exit;
//--- Update common data ---
            for j:= 0 to Data.ColCount - 1 do
              M_Data.Topics[i].Table.Cells[Cells.Top, j]:= Data.Cells[0, j];
//--- Find Expert in child window ---
              for j:= 0 to MainForm.MDIChildCount - 1 do //Find Experts
              begin
                Child:= TMDIChild(MainForm.MDIChildren[j]);
                if(Child <> nil) then
                begin
                  b_found:= false;
                  for k:= 0 to Data.ColCount - 1 do
                  begin
                    if(Child.Expert.SpotName = Data.Cells[0, k]) then //found spot
                    begin
                      b_found:= true;
                      for z:= 0 to length(M_Data.FutNames) - 1 do  //more one future
                      begin
                        if(Child.Expert.FutName = M_Data.FutNames[z]) then
                        begin
                          if(CreateOutData(Child.Expert.FutName, Child.Expert.SpotName, z) = true) then // prepare out dada
                          begin
                              Child.FExpert.OnData(@OutData[z]);        //Send data
                              PostMessage(Child.Expert.EHandle, WM_ON_TICK, Child.Expert.EHandle, SPOT_DATA);  //Init OnTick
                          end;
                          break;
                        end;
                      end;
                    end;
                    if(b_found = true) then break;
                  end;
                end;
              end;
            break;
          end;
        end;
      end;

дочернее окно обрабатывает сообщение

const
  WM_ON_TICK  = WM_USER + 178;
  WM_ON_TRADE = WM_USER + 179;
  WM_ON_ERROR = WM_USER + 180;
  WM_TRADE_DONE = WM_USER + 181;

  TMDIChild = class(TForm)
    Memo1: TMemo;
    SetBtn: TBitBtn;
    StBtn: TBitBtn;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    PopupMenu1: TPopupMenu;
    CEntLabel: TLabel;
    СExitLabel: TLabel;
    FutLabel: TLabel;
    SpotLabel: TLabel;
    MaxLabel: TLabel;
    MinLabel: TLabel;
    CBLabel: TLabel;
    EntLabel: TLabel;
    ExtLabel: TLabel;
    MCntLabel: TLabel;
    AvlLabel: TLabel;
    N1: TMenuItem;
    CurDeltaLabel: TLabel;
    CurDivLabel: TLabel;
    PopupMenu2: TPopupMenu;
    N2: TMenuItem;
    ColorLabel: TLabel;
    SellLabel: TLabel;
    BuyLabel: TLabel;
    DivLabel: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure StBtnClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure SetBtnClick(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
  private
    { Private declarations }
  public
    FExpert: TExpert;
    { Public declarations }
    procedure ResiveMessTick(var Msg: TMessage); message WM_ON_TICK;
    procedure ResiveMessTrade(var Msg: TMessage); message WM_ON_TRADE;
    procedure ResiveMessError(var Msg: TMessage); message WM_ON_ERROR;
    procedure ResiveMessDone(var Msg: TMessage); message WM_TRADE_DONE;
    property Expert: TExpert read FExpert;
  end;

procedure TMDIChild.ResiveMessTick;
begin
  if(Msg.WParam = Expert.EHandle) then
  begin
    Mutex.Lock;
    try
      FExpert.FDoOnTick:= true;
      case Expert.ValidData of
        OLD_DATA: FExpert.FValidData:= integer(Msg.LParam);   //Set current data
        SPOT_DATA: if( integer(Msg.LParam) = FUT_DATA) then
        begin
          FExpert.FValidData:= VALID_DATA;
          inc(FExpert.FLblCnt1);  //DEBUG
        end;
        FUT_DATA: if(integer(Msg.LParam) = SPOT_DATA) then
        begin
         FExpert.FValidData:= VALID_DATA;
         inc(FExpert.FLblCnt2);  //DEBUG
        end;
        VALID_DATA:
        begin
          if(integer(Msg.LParam) = SPOT_DATA) then inc(FExpert.FLblCnt2) else //DEBUG
            if(integer(Msg.LParam) = FUT_DATA) then inc(FExpert.FLblCnt1);    //DEBUG
        end;
        else
        begin
          FExpert.FMemoStr:= 'Значение ValidData = ' + IntToStr(Expert.ValidData);
          FExpert.Synchronize(FExpert.UpdMemo);
        end;
      end;
    finally
      Mutex.Unlock;
    end;
    if(Expert.DoOnTick = true) then FExpert.FEvent.SetEvent;
  end else
  begin
    FExpert.FMemoStr:= 'Не совпадают хендлы!';
    FExpert.Synchronize(FExpert.UpdMemo);
  end;
end;

При запуске приложения некоторые роботы, получая сообщения могут работать и день и два, получая и обрабатывая тысячи сообщений, а могут "уснуть" через 10 минут (нет закономерности)

Сообщения PostMessage() отсылаются в это "спящее" окно, а функция 

 procedure ResiveMessTick(var Msg: TMessage); message WM_ON_TICK;

ничего не получает.

Почему может происходить такое?