我的EA上有一个“设置”,当我的EA交易程序遇到错误时给我发电子邮件,并根据{{3}中预先确定的3-4位错误代码向我提供错误代码}。
/* 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平台期刊中出现新错误时,它是否会自动执行此操作?
答案 0 :(得分:1)
有一个有用的功能 ResetLastError()
,明确将 _LastError
设置为零。接下来,每次调用 GetLastError()
函数时都会产生副作用,因为它还会为_LastError
变量设置为零。
无论哪种方式,通常的做法是嵌入(环绕)一个部分,其中一些错误状态需要相应地处理,直到:
// -------------------------------------------- // 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 __________________________
这使您的代码能够抵御任何类型的“忘记”#34; (巧合地取消重置)最后一个错误(这并没有导致你的代码执行崩溃,这样的错误已经出现但是......),这会在以后的" next"错误处理部分,因此可能会在电子邮件信号不存在的情况下向您发送电子邮件,但是“忘记了”#34; _LastError
系统寄存器内的(取消重置)值偶然匹配错误处理情况,导致发送所述电子邮件(好像存在电子邮件信号(如上所述)