MT5和trans2quik.dll - 页 6

 
prostotrader:

不,我只需要同步3个线程(基本上写一个同步器),但

我不知道如何。

好吧,那就只剩下旗子了。我们设置一个旗子,等待其他人完成活动,停下来并移除他们的旗子,做事,移除旗子。嗯,还有旗帜优先的逻辑,显然。

我不会停止DDE,而是让它写到缓冲区,这样就不会有任何损失。

 
Yuriy Asaulenko:

好吧,那就只剩下旗帜了。竖起一面旗子,等待其他人完成他们的活动,停下来并取下他们的旗子,做完生意,取下旗子。嗯,还有旗帜优先的逻辑,显然。

不过我不会停止DDE,让它写到缓冲区,这样就不会有什么损失了。

换句话说,同步器应该对传入的函数进行缓冲,这些函数将根据优先级被执行?

 
prostotrader:

所以同步器需要对传入的函数进行缓冲,这些函数将根据优先级被执行?

不,只是根据相关的标志和它们的优先级来暂停线程。在这个变体中,根本不需要其他东西。

第二种选择是等待线程的函数终止,然后通过其标志停止它。这可能是必要的,例如,更新asc-bid、指标和其他我们需要的东西。

例如,标志值。

0 - 线程处于空闲状态。

1 - 线路接通。

2 - 请求停止所有低优先级的线程。

把它设置为2,等到所有的线程都变成0,执行程序,把它设置为0或1。通过这个标志,所有其他线程恢复工作。

 
Yuriy Asaulenko:

不,只是通过相关的标志和它们的优先级来暂停线程。这个选项完全不需要其他东西。

第二种选择是等待,直到线程的函数完成,然后通过其标志停止它。这可能是必要的,例如,更新asc-bid、指标和其他我们需要的东西。

例如,标志值。

0 - 线程处于空闲状态。

1 - 线路接通。

2 - 请求停止所有低优先级的线程。

把它设置为2,等到所有的线程都变成0,执行程序,把它设置为0或1。通过这个标志,所有其他线程恢复工作。

你自己写道,暂停DDE是不好的

 
prostotrader:

你自己写道,暂停一个DDE是不好的

我只是不理解你。

我所做的是这样的。

1.服务器(我有TCP服务器)在其线程中不断地将数据写到集合中,就像后进先出。没有必要阻止它。

数据在另一个线程中从集合中读取/删除,并写入DataTable(它类似于数据库表,但在内存中)。这条线可能会被暂停,如果它妨碍了。

3.另一个线程从DataTable中读取数据进行分析。这个线程不会干扰线程2,因为它是由select获取的,除了2以外没有人向这个表写数据。如果这条线索妨碍了你,你也可以停止它。

我不需要暂停任何事情,因为我用一个工具工作,线程3被切换到提交-执行订单和跟踪交易。

 
Yuriy Asaulenko:

我只是不理解你。

我所做的是这样的。

1.服务器(我有一个TCP服务器)在其线程中不断地将数据写到集合中,就像后进先出。没有必要阻止它。

数据在另一个线程中从集合中读取/删除,并写入DataTable(它类似于数据库表,但在内存中)。这条线可能会被暂停,如果它妨碍了。

3.另一个线程从DataTable中读取数据进行分析。它不会干扰线程2,因为它是由select获取的,除了2以外没有人在向这个表写东西。如果这条线索妨碍了你,你也可以停止它。

我不需要暂停任何事情,因为我用一个工具工作,线程3被切换到提交-执行订单和跟踪交易。

你很幸运,我有52种工具,所以我必须换。

 
prostotrader:

你很幸运,我有52种乐器,所以我必须转换

我认为对所有52种工具的分析是在一个线程中完成的?或者是吗?

什么被用作存储?在我的例子中,由于有多用户访问,锁定是不必要的,而且阅读也不会影响到写作。

唯一需要被阻止的是Child对trans2quik的共享访问。而且,只有在一组线程的情况下,才会有孩子。你可以通过在一个单独的线程中组织trans2quik并在事件中调用它,同时锁定事件处理程序直到请求完成。其余的不能达到)。

 
prostotrader:

完全放弃了连接MT5和Kvik的想法,只解决了Kvik(DEE服务器+trans2quik.dll)。

真可惜。作出这一决定的原因是什么?在两个程序之间接收/传输数据是否有严重障碍?

 
Yuriy Asaulenko:

我认为对所有52种工具的分析是在一个流中完成的?或者说不是吗?

什么被用作存储?在我的例子中,在多用户访问的情况下,锁定是不必要的,而且阅读也不会影响到写作。

唯一要阻止的是Child对trans2quik的共享访问。而且,只有在一组线程的情况下,才会有孩子。你可以通过在一个单独的线程中组织trans2quik并在事件中调用它,同时锁定事件处理程序直到请求完成。其余的就不说了)。

不,分析本身是在Child中进行的(分别为每个工具)Selector(1,2)选择哪个机器人来发送数据并检查

存储 - 只是存储在内存中的表

 
Aleksey Vyazmikin:

这真是太糟糕了。这个决定的原因是什么,在两个程序之间接收/传输数据是否有严重的障碍?

弄得一塌糊涂就是没有意义。

使用MT5,我们需要在专家顾问中的代码和DLL,它将接收数据。

只使用Quick,我们只有一个应用(见图与图)。