错误、漏洞、问题 - 页 2555

 
TheXpert:
为写柄添加FILE_SHARE_READ,为读柄添加FILE_SHARE_WRITE

不起作用,只有单独挂在图表上才起作用。使用过的。

handle_write=FileOpen("checkbox_color.txt",FILE_WRITE|FILE_SHARE_READ|FILE_TXT,';');
handle_read=FileOpen("checkbox_color.txt",FILE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
 
Влад:

不起作用,只有单独挂在图表上才起作用。使用过的。

全部解决了。已使用。

handle_write=FileOpen("checkbox_color.txt",FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
handle_read=FileOpen("checkbox_color.txt",FILE_READ|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
 
一个新的问题出现了。在第一个图表 中,由于上述指标,我正在改变变量。在第二个图表中,信息只在TF变化时显示,而不是像我希望的那样即时显示。如何才能解决这个问题?仅仅通过按PCM更新图表并没有帮助。
[删除]  

build 2135根本就坏了

#define abort(ANY) do{printf("abort, file=%s,  line=%i", __FILE__, __LINE__); Alert(1/(uint)MathAbs(0));}while(false)

#define  GENERATE_VECTOR_GROWTH_FACTOR 2
#define  GENERATE_VECTOR(NAME, REF)                                         \
   template <typename T>                                                   \
   class NAME                                                              \
   {                                                                       \
      uint sz;                                                             \
   public:                                                                 \
      T a[];                                                               \
      NAME(): sz(0) {}                                                     \
      NAME(uint count): sz(0) {                                            \
         if (ArrayResize(this.a, count) == -1)                             \
            abort(0);                                                      \
         this.sz = count;                                                  \
      }                                                                    \
      uint size()const           {return this.sz;}                         \
      void clear()               {this.sz = 0;}                            \
      void push_back(T REF value) {                                        \
         if (this.sz == ArraySize(this.a)  &&                              \
             ArrayResize(this.a, this.sz*                                  \
                           GENERATE_VECTOR_GROWTH_FACTOR+1) == -1)         \
            abort(0);                                                      \
         this.a[this.sz++] = value;                                        \
      }                                                                    \
      void reserve(uint new_cap) {                                         \
         if ((int)new_cap > ArraySize(this.a))                             \
            ArrayResize(this.a, new_cap);                                  \
      }                                                                    \
      void erase(uint pos) {                                               \
         if ( ! ArrayRemove(this.a, (int)pos, 1) )                         \
            abort(0);                                                      \
         -- this.sz;                                                       \
      }                                                                    \
   };
#define  GENERATE_VECTOR_EMPTY
GENERATE_VECTOR(vector_fund, GENERATE_VECTOR_EMPTY);
GENERATE_VECTOR(vector_ref, const &);
#undef  GENERATE_VECTOR_EMPTY
#undef  GENERATE_VECTOR_GROWTH_FACTOR
#undef  GENERATE_VECTOR

'GENERATE_VECTOR' - unexpected token, probably type is missing?    1_mystd.mqh    74    1

'GENERATE_VECTOR' - 意外的标记,可能是类型丢失? 1_mystd.mqh 75 1

'GENERATE_VECTOR' - 变量已经定义 1_mystd.mqh 75 1

编译了很久,在新版本中中断了。

[删除]  
Vict:

build 2135被破坏了。

它已经编译了很久,在新的版本中被破坏了。

我作弊,没事的,其中一个堕胎的形式被称为
abort();

曾经吃过编译器,但在新版本中它拒绝了,他们一定是调整了什么(好吧,我不认为我不小心删除了一个零)。

 
我注意到ME在编译时加载了CPU的2个核心(26%),问题来了--是多线程,那么为什么不使用所有核心进行编译,还是浪费资源 的错误?
 
Vict:
我作弊,没事的,其中一个堕胎的形式被称为

编译器曾经吃了它,但在新版本中它拒绝了,所以他们一定调整了什么(好吧,我不认为我不小心删除了一个零)。

顺便说一下,我们应该要求开发人员引入全职的流产、断言......理想情况下,当然还有例外。但至少要从小事做起。
 
Alexey Navoykov:
顺便说一下,我们必须要求开发人员引入内联终止、中止......当然,最好还有异常。但至少要从小事做起。

放一个字,如果我没记错的话,我在上一个MQL周期中要求这样做,已经4年了,但我不得不听识字的人吵吵嚷嚷,他们说不需要,这样写就行了......如果你想在访问OHLC数据或指标出现严重错误时停止程序的执行。我看了一半的kodobase,是的,一些编解码器检查这些条件,但处理是不存在的,我看到的最多的是专家日志中的输出,就像发生了一个问题,不要担心,我将继续在这个勾上用无效的数据工作)))。

SZY: 我很痛心,我需要一个简单的方法来停止处理当前的勾选!- 停止专家的工作,所以这是可能的,但要停止处理一个刻度,发明并扭头就走--我怀疑在编译器层面上,abort()实现起来并不比ExpertRemove()更困难--它已经存在。

ZZZY: 在MQL中写一个没有中止()的程序化风格的EA的任务,比从现成的子程序中组装代码更像一项发明。 我怀疑这些关于如何写一个可以正确处理另一个TF的历史的指标的不断讨论,也会更容易使用中止()来解决 - 我还没有决定这个问题

 
Igor Makanu:

放个话,如果我没记错的话,四年前我在上一个MQL周期就要求了。嗯,一切如常

你是对的,当你开始这么说的时候,那些有文化的人就会从所有的洞里出来,说 "这不是C++")。

你需要一个简单的方法来停止处理当前的tick!- 这意味着有可能停止EA的工作,但要停止处理一个点,你必须发明并解决它 - 我怀疑在编译器层面,abort()的实现不会比ExpertRemove()更复杂 - 它已经存在。

好吧,中止和断言的实现方式与上面的代码相同。 虽然这确实很难看,有时也很混乱,因为我并不总是注意到日志中前面的信息。 也许有一些其他的错误,会在日志中返回类似 "内部错误 "的信息?至少它看起来不会那么尴尬 )

 
Alexey Navoykov:

你是对的,当你开始这么说的时候,那些有文化的人就会从所有的洞里出来,说 "这不是C++")。

好吧,中止和断言的实现方式与上面的代码相同。 虽然这确实很难看,有时也很混乱,因为我并不总是注意到日志中前面的信息。 也许有一些其他的错误,会在日志中返回类似 "内部错误 "的信息?至少它看起来不会那么尴尬 )

在这里,@Vict 帮助我通过宏替换的方式,使退出操作系统的异常https://www.mql5.com/ru/forum/318246/page10#comment_12651045

虽说在一般情况下是一个可行的解决方案,但...但它看起来很丑陋,令人厌恶!)))