我喜欢C#线程安全BlockingCollection,它允许我使用Take和TryTake方法“阻止”直到有新项可用,例如,最大阻止时间为1秒:orderActions.TryTake(out oa, 1000);
什么是c ++ / boost模拟BlockingCollection?
我可以有一个平均添加/删除操作为O(1)的集合(这对于基于哈希表的集合来说是典型的),最差的最大/最小值小于O(n),可能是O(log n)(典型的树 - 基础集)?
更新似乎在最简单的情况下,我可以在每次最大/最小消失时重新扫描所有N个元素,并且通常它给我O(1).但我将我的算法应用于股票交易,其中更接近最小/最大的变化更可能,所以我只是不想每次最大或最小消失时重新扫描所有内容,我需要比完全重新扫描更聪明的东西,它给出O(n).
upd2在我的情况下,set包含100-300个元素.最大/最小元素的变化很可能,因此max/min经常变化.我需要跟踪最大/分钟.我仍然想要添加/删除O(1).
在我的交易应用程序中,我有股票价格的“实时报价”。我需要维持 SMA。假设我想要 20 根蜡烛的 SMA,其中每根蜡烛的持续时间为 10 秒。这意味着
每 10 秒我就有一个“检查点”,其中:
每一个刻度:
因此,在任何价格变动时我都需要“重新计算”SMA。在大多数情况下,只有最后一根蜡烛的价格发生变化(因为我们使用最后的价格)。每 10 秒一次,我需要多一点额外的工作 - 我需要“忘记”过时蜡烛的平均值,并“存储”“刚刚创建”蜡烛的平均值。
您能建议如何以最低的延迟实现这一点吗?低延迟是首要要求。
这是我在.h文件中的声明:
static std::atomic<int> OrdersExecutorIdCounter;
Run Code Online (Sandbox Code Playgroud)
这是从.cpp文件启动的:
std::atomic<int> ActionBasedOrdersExecutor::OrdersExecutorIdCounter = 0;
Run Code Online (Sandbox Code Playgroud)
它在VC++中编译得很好,但是在gcc 4.8中我得到了这个错误:
error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&)’
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
有人知道如何从我的自定义向导中隐藏这样的帮助图像吗? alt text http://img268.imageshack.us/img268/6485/newprojectwt.png
setHelpAvailable(false) 不工作,它隐藏"矩形帮助按钮",而不是这个图像.
谢谢
在C#中可以这样写东西:
Instrument instr = new Instrument { ClassCode = "Hello", Ticker = "World" };
Run Code Online (Sandbox Code Playgroud)
但是要做到这一点,你必须set;在相应的类中添加:
class Instrument
{
public string ClassCode { get; set; }
public string Ticker { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这意味着以后有人可能会意外地改变价值:
instr.ClassCode.set = "Destroy"
Run Code Online (Sandbox Code Playgroud)
我不想允许这样做.即,从一方面我想要一个只读属性,从另一只手我想创建这样的对象:
Instrument instr = new Instrument { ClassCode = "Hello", Ticker = "World" };
Run Code Online (Sandbox Code Playgroud)
我不确定这是否可行.可能我应该使用字段或其他东西而不是属性.我只想拥有最后一句的语法,但同时保持readonly.
upd:简而言之,不允许以任何方式使用readonly属性.在这种情况下应该使用常规构造函数和"get".
我正在使用com.google.gwt.user.client.ui.FlowPanel小部件彼此非常接近.但是我无法弄清楚如何设置边距?
BTW可能有更好的布局?我只需要一个容器,用于逐个定位的几个Anchor.
我可以写出如此美丽的直截了当的代码:
public int Delta { get; private set; }
Run Code Online (Sandbox Code Playgroud)
现在我想只添加一个电话 OnPropertyChanged("Delta");
这是我知道如何做到这一点的唯一方法:
public int Delta { get { return _delta; } private set
{
_delta = value; OnPropertyChanged("Delta"); }
}
private int _delta;
Run Code Online (Sandbox Code Playgroud)
这是太多的额外代码!为什么我要在这种情况下引入字段?你能让这段代码缩短吗?我想有类似的东西,但它不起作用:
public int Delta { get; private set { OnPropertyChanged("Delta"); } }
Run Code Online (Sandbox Code Playgroud) 我收到FormatException,我不知道为什么.
System.FormatException was unhandled by user code
Message=Input string was not in a correct format.
Source=mscorlib
StackTrace:
at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.Convert.ToDouble(String value)
Run Code Online (Sandbox Code Playgroud)
代码行:
DELTA_BUY = Convert.ToDouble(parameters["DELTA_BUY"]);
Run Code Online (Sandbox Code Playgroud)
值(来自调试窗口):
parameters["DELTA_BUY"] "0.0016" string
Run Code Online (Sandbox Code Playgroud)
upd在一个执行路径上工作正常但在另一个执行传递上失败(来自WCF时).双重可重复,与字符串一起使用.可能是格式/国有化问题?