错误、漏洞、问题 - 页 708

 

你好,OpenCL!在调试模式 下,代码工作得很好....但在测试中,当调用CLContextCreate 时,出现了错误5100...服务台?

Terminal CPU: GenuineIntel Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz with OpenCL 1.1 (4 units, 2095 MHz, 5990 Mb, version 2.0)

终端GPU:Advanced Micro Devices, Inc.采用OpenCL 1.1的Turks(6个单元,725 MHz,1024 Mb,版本CAL 1.4.1703(VM))。

Build 619 Windows 7 SP1 64-x

...

在PC上用另一个电子游戏重复了一遍--没有帮助......。

附加的文件:
 
MigVRN:

调试模式 下,代码工作得很好....但在测试中,当CLContextCreate 被调用时,会产生错误5100。服务台?

我不认为这是一个错误,我认为OpenCL在测试器中不工作--支持被禁用。暂时性残疾还是永久性残疾,这是一个开放的问题。
 
MigVRN:

你好,OpenCL!在调试模式 下,代码工作得很好....但在测试中,当调用CLContextCreate 时,出现了错误5100...服务台?

...

在桌面上用不同的电子游戏重复了一遍--没有任何帮助......。

我不记得在测试器中宣布启用OpenCL,也许我错过了什么。

只要功能是在终端调试的,只要它准备好了,测试器中的支持就会被打开。

也要支持远程测试。

 
MetaDriver:
我不认为这是一个错误。 我认为OpenCL在测试器中不工作 - 支持被禁用。暂时性残疾还是永久性残疾,这是一个开放的问题。
Urain

我不记得曾宣布在测试器中启用OpenCL,也许我错过了什么。

当功能在终端调试时,一旦准备好,测试器中的支持将被打开。

他们也将不得不支持远程测试。

谢谢! :( 我将期待它...我真的已经想试试了。
 

我决定写一个EA。当我开始从头开始写东西时,我总是检查每个步骤是否有错误,并检查代码的效率。我不喜欢专家顾问的工作方式,如 "新栏 "事件。我找了很久才找到原因--当代码中只有几行时,我才找到了它的底部

//+------------------------------------------------------------------+
//|专家勾选功能|
//+------------------------------------------------------------------+
void OnTick()
{
Alert("New tick",TimeCurrent() );
}
//+------------------------------------------------------------------+

结果我得到了100%的模拟质量,模拟了38242987 次,但在测试员的日志中却出现了严重的遗漏(整日),我只计算了13259 次......
可能的原因是什么?

附加的文件:
20120408.log  2074 kb
 

Renat, Slava, 可以通过(简单)制作一个预处理器 的特殊指令来接近参数化,其作用类似于#include,但允许重复编译同一个insluder。 例如。

#define ArrayType double
#include "ISTemplate.mqh"
#define ArrayType float
#include "ISTemplate.mqh"
#define ArrayType int
#include "ISTemplate.mqh"
#define ArrayType uint
#include "ISTemplate.mqh"
#define ArrayType long
#include "ISTemplate.mqh"
#define ArrayType ulong
#include "ISTemplate.mqh"
#define ArrayType short
#include "ISTemplate.mqh"
#define ArrayType ushort
#include "ISTemplate.mqh"
#define ArrayType char
#include "ISTemplate.mqh"
#define ArrayType uchar
#include "ISTemplate.mqh"
#define ArrayType string
#include "ISTemplate.mqh"

现在,它可以编译,但不能工作(或者说只对第一个#include起作用)。 一个特殊的指令(#reinclude,#Include或#template)可以解决这个问题。 顺便说一下,在为标准类型编写函数重载时,它也会为你节省很多时间。而且标准库可以变得紧凑和漂亮。 你可能会接近 "正常的 "可参数化的类--只要给语言添加一个新的语法,并将隐藏的#reinclude自动化。

// 工作实例,在这里,这个包容是由我自己的预处理程序部署的。

附加的文件:
ISort.mqh  2 kb
 

这也是类参数化的一个变种。

#define _MyContainer(name,type,size) class name {public: type array[size]; virtual type At(int i){return array[i];}}
#define  ASize 8
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   _MyContainer(MyClass,int,ASize);
   MyClass MyVar;
   Print(sizeof(MyVar)); 
   for(int i=0;i<ASize;i++)
     {
      MyVar.array[i]=i*i;
     }
   for(int i=0;i<ASize;i++)
     {
      Print(MyVar.At(i));
     }
  }

它是有效的,你甚至可以增加继承权。;)

但为了能够或多或少可靠地使用这个选项,你至少要在宏中移动行。

// 而这个噱头(当你不习惯的时候?)看起来相当奇怪。:))

附加的文件:
DefTest.mq5  2 kb
 
MetaDriver:

Renat, Slava, 你可以通过(简单的)制作一个预处理器 的特殊指令来接近参数化,其作用类似于#include,但允许重复编译同一个insluder。 例如。

这个想法很清楚,但最好是立即实施模板。

我们以后再来讨论这个问题。

 
Renat:

这个想法很清楚,但最好是立即实施模板。

我们以后再来讨论这个问题。

耶!!谢谢你。
 

测试器中的这个条目顺利通过,试图将EA附加到图表上时出现了错误。

int OnInit()
  {
   hPerCros=iCustom(_Symbol,0,"\\Каналы\PercentageCrossoverChannel",Percent,Shift) ;
   if( hPerCros < 0)
      Print("Ошибка создания индикатора=  ",GetLastError());
   return(0);
  }