MT4挂起,没有再次调用start()。 - 页 3

 
mt4forum:

不,我没有使用sleep()或messagebox(),但我在函数MyInit()中做了大量的工作,大约需要5秒钟。

你可以在日志文件中看到这一点。

2013.11.15 14:35:32 测试减少1180990。USDJPY M15 DebugStart: InitialHistoryGapClosed
2013.11.15 14:35:32 测试减少 1180990:USDJPY M15 DebugMyInit begin: <---------- work starts
2013.11.15 14:35:32 Test reduced 1180990:USDJPY M15 DebugMyInit InitialMyInitCalls:0 IndexCount:1 nach CreateHistory()
2013.11.15 14:35:33 测试减少 1180990:USDJPY M15 DebugMyInit InitialMyInitCalls:0 IndexCount:2 nach CreateHistory()
2013.11.15 14:35:34 测试减少 1180990:USDJPY M15 DebugMyInit InitialMyInitCalls:0 IndexCount:3 nach CreateHistory()
2013.11.15 14:35:35 测试减少 1180990:USDJPY M15 DebugMyInit InitialMyInitCalls:0 IndexCount:4 nach CreateHistory()
2013.11.15 14:35:35 测试减少 1180990:USDJPY M15 DebugMyInit InitialMyInitCalls:0 IndexCount:5 nach CreateHistory()
2013.11.15 14:35:36 测试减少 1180990:USDJPY M15 DebugMyInit InitialMyInitCalls:0 IndexCount:6 nach CreateHistory()
2013.11.15 14:35:37 测试减少 1180990:USDJPY M15 DebugMyInit InitialMyInitCalls:0 IndexCount:7 nach CreateHistory()
2013.11.15 14:35:37 测试减少 1180990:USDJPY M15 DebugMyInit return InitialMyInitCalls:0 IndexCount:8 <---------- 工作结束
2013.11.15 14:35:37 测试减少 1180990:USDJPY M15 DebugStart: InitialGapFound中的最后一次返回

但是,为什么会让MT4在这之后陷入循环?

它没有,但你搞砸了接口线程,MT4就锁住了......你不能在EA中做你正在做的事吗?
 
你们都在谈论无限循环,但没有人好奇CreateHistory()做了 什么。根据日志输出,它只出现在最后的start()运行中。
 
Ovo:
你们都在谈论无限循环,但没有人好奇CreateHistory()做了 什么。根据日志输出,它只出现在最后的start()运行中。
我以为它是某种历史保存功能......如果OP想展示它,他会的。我想他不会,即使他想,也可能不会帮助我们帮助他。 最快的方法是让他把他的代码贴出来,这样有人就可以用一双新的眼睛来看待它了。. .
 
RaptorUK:
我想这是某种保存历史的功能......如果OP想展示它,他会的......。我想他不会,即使他想,也可能不会帮助我们帮助他。 最快的方法是让他把他的代码贴出来,这样有人就可以用一双新的眼睛来看待它了。. .

没问题,我想说的是,无限循环可能不是终端挂起的唯一原因。特别是如果脚本修改了一些文件的话。
 

mt4forum 2013.11.16 11:14


但为什么之后MT4会陷入循环?

从您的日志文件来看,它似乎已经进入了一个循环。它是在循环中吗? 如果是,你怎么知道它退出了循环?它是否回到了init()?

你添加了Print("Start Started");而它从未在日志文件中出现,所以它从未进入start()函数。这表明它从未退出过init()函数。多放些Print()语句,缩小范围。

 

首先,感谢你的极大兴趣,并为我迟来的回应感到抱歉。

我将在以下条目中处理不同的评论。

 
RaptorUK:
它没有,但你把界面的线程搞乱了,MT4就锁住了 ......你不能在EA中做你正在做的事吗?

我已经将该程序作为EA运行。它要么挂起,要么让MT4崩溃。

 
mt4forum:

我已经将该程序作为EA运行。它要么挂起,要么让MT4崩溃。

我认为你需要公布你的代码,这样才有可能帮助别人。
 
Ovo:
你们都在谈论无限循环,但没有人好奇CreateHistory()做 什么。根据日志输出,它只出现在最后的start()运行中。

CreateHistory()做了大量的工作。它在货币对 和时间框架中循环,并生成离线图表。

但日志文件显示,它的完成是正确的。

 
SDC:

从你的日志文件来看,它似乎已经进入了一个循环。在它到达8之后发生了什么? 它是否在一个循环中,如果是,你怎么知道它退出了那个循环?它是否回到了init()?

你添加了Print("Start Started");而它从未在日志文件中出现,所以它从未进入start()函数。这表明它从未退出过init()函数。多放些Print()语句,缩小它的范围。

在它到了8之后,它正确地返回到init()。

日志文件中的下面一行显示。"DebugMyInit return ... "是MyInit()中最后的调试行。

2013.11.15 12:33:22 Test reduced 395052: USDJPY M15 DebugMyInit return InitialMyInitCalls:0 IndexCount:8

我使用我自己的打印函数 来生成日志文件。Print("Start Started")并没有打印到该日志文件。

该条目

2013.11.15 12:33:22 Test reduced 395052: USDJPY M15 DebugStart: last return in InitialGapFound

显示,它退出了init()函数。

如果我可以相信,我的调试函数正确记录了所有的信息,那么日志文件告诉我们,在最后一次运行start()之后。

start()被退出,不再被调用。这就是问题所在。