首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MetaTrader4错误代码刷新进行正确的错误处理?

如何使用MetaTrader4错误代码刷新进行正确的错误处理?
EN

Stack Overflow用户
提问于 2017-01-19 10:11:41
回答 1查看 244关注 0票数 1

我有一个“设置”在我的电子邮件,当我的专家顾问遇到一个错误,并提供给我的错误代码,根据预先确定的3-4位数字错误代码在MQL4网站上的文档

代码语言:javascript
复制
/* technically speaking,
   error codes with 5+ digits are also possible,
   Using:
   ------                                                            */
   SetUserError( 1000000 );                                          /*

// this will set an error-state
// with a number 1065536 -- having a bit more than the said 3 ~ 4 digits
// composed as ( 1000000 + ERR_USER_ERROR_FIRST )
*/

这是为了让我能诊断出问题。

我只是想澄清我是否需要刷新错误代码(之前的错误),我在我的电子邮件中获得了错误代码,或者当我的MT4平台的日志中出现了一个新的错误时,它是否会自动刷新错误代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-19 15:39:54

有一个有用的函数ResetLastError()显式地将_LastError设置为零。接下来,每次调用GetLastError()函数也会产生副作用,因为它也会将零设置为_LastError变量。

无论哪种方式,嵌入(环绕)一个部分是一种常见的做法,其中需要相应地处理一些错误状态,对此:

代码语言:javascript
复制
// -------------------------------------------- // START_________________________
     GetLastError();                            // implicit  pre-reset _LastError
   ResetLastError();                            // explicit  pre-reset _LastError
   bool an_OK_flag = OrderModify( ... );        // XTO call  w ex-post _LastError
   int  anErrorSTATEtoHANDLE = GetLastError();  /* get a value of the  _LastError
                                                 + implicit post-reset _LastError */
// -------------------------------------------- // HANDLE ERROR-STATE(s)
   switch( anErrorSTATEtoHANDLE ){
         case ERR_NO_ERROR:                       break;
         case ERR_NO_RESULT:                      ...
                                                  break;
         case ERR_INVALID_TRADE_PARAMETERS:       ...
                                                  break;
         case ERR_SERVER_BUSY:                    ...
                                                  break;
         case ERR_BROKER_BUSY:                    ...
                                                  break;
         case ERR_TOO_MANY_REQUESTS:              ...
                                                  break;
         case ERR_TRADE_MODIFY_DENIED:            ...
                                                  break;
         ...
         default:                                 break;
   }
// -------------------------------------------- // FIN __________________________

这使您的代码对任何类型的“遗忘”(巧合的是,未重置)的最后错误(它没有破坏您的代码执行在出现这种错误的地方,但.)健壮。这将触发“下一步”错误处理部分中不需要的行为,从而可能在电子邮件信号不存在的情况下向您发送电子邮件,但_LastError系统寄存器中的“遗忘”(un重置)值恰好与错误处理情况相匹配,从而导致发送所述电子邮件(就像存在电子邮件信号一样)(正如上面所描述的那样)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41739105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档