“MetaTrader已停止工作”,求解!!!

 

最近遇到了这个问题:

 MT4客户端调用dll(VC++)进行socket通信(获取数据并显示在图表之上),在dll接口函数里开了一个线程等待并接收数据(当套接字有数据到来时,接收数据并返回给MT4客户端),当把图表窗口关闭以后,如果发送端继续发送数据,此时MT4客户端就会出现如下情况:

 

  

 

 当把图表窗口关闭,MT4的MQL程序(脚本或EA)执行结束,但其调用的dll接口函数所开的线程并没有退出, 如果此时发送端再与该线程通信,就会出现以上情况;若能在图表窗口被关闭之前退出该线程,就不会导致MT4客户端崩溃。问题在于图表窗口被关闭之前,MT4客户端能否做到通知dll所开线程退出?即有没有对图表窗口关闭事件的响应?


 

有的,就是OnDeinit()函数。

OnDeinit()函数会在多种情况下被调用,如果你还特别需要针对图表窗口关闭,可以判断 reason==4(REASON_CHARTCLOSE).

详细的你可以查下MQL4帮助文件 .

 
tiankong:

最近遇到了这个问题:

 MT4客户端调用dll(VC++)进行socket通信(获取数据并显示在图表之上),在dll接口函数里开了一个线程等待并接收数据(当套接字有数据到来时,接收数据并返回给MT4客户端),当把图表窗口关闭以后,如果发送端继续发送数据,此时MT4客户端就会出现如下情况:

 

  

 

 当把图表窗口关闭,MT4的MQL程序(脚本或EA)执行结束,但其调用的dll接口函数所开的线程并没有退出, 如果此时发送端再与该线程通信,就会出现以上情况;若能在图表窗口被关闭之前退出该线程,就不会导致MT4客户端崩溃。问题在于图表窗口被关闭之前,MT4客户端能否做到通知dll所开线程退出?即有没有对图表窗口关闭事件的响应?


       对于楼主所说的这个问题,最近我发现我的账户也是这样,但是仅限于模拟账户,实仓(相同的EA)没出现过这个问题、、、
 
       现在发现无论什么平台都会出现楼主这种情况,无论有没有挂EA都会如此,估计是是MT4升级后出现的bug、、、