我们使用C#实现了一个消息队列Queue.我们知道我们只有一个消费者从队列中取出可用消息以进行while循环处理.我们也知道只有一个生产者将消息放入队列.
我们有一个lock上面的消息队列,以确保消费者和生产者不能同时访问队列.
我的问题是lock必要的吗?如果在实际添加项目之后Queue增加其Count属性,并且如果消费者在检索之前检查,则消费者应该获得完整的消息项,即使我们没有.对?因此,我们不会面临部分邮件项目问题.那我们可以摆脱那个?Countlocklock
这lock将减慢系统速度,偶尔我们可以看到检索线程被阻塞一段时间,因为我们有一个非常重的生产者.
编辑:
不幸的是我们正在使用.Net 3.5.
我有以下声明:
float diff = tempVal - m_constraint.getMinVal();
Run Code Online (Sandbox Code Playgroud)
tempVal被声明为浮点型并且getMinVal()返回浮点值。
我有以下打印输出:
diff=0.099999905,tempVal=5.1,m_constraint.getMinVal()=5.0
我预计差异是0.1,但不是上面的数字。怎么做?
我有一个自定义SwingWorker内部类.我发现他们的哈希码有几次对于它的不同实例是相同的.这是为什么?正常?
编辑:
我拥有的内部类是该类的子SwingWorker类.
在我们的应用中,我们创建了自己的日志系统.在此日志记录系统中,有几种不同的日志类型,调试,错误,警告,通信,性能和.... 有很多#ifdef和#endif来禁用特定的日志类型.这些#ifdef和#endif使代码难以阅读.
我们正在考虑删除这些#ifdef和#endif,并在邮件写入文件之前进行检查.这意味着对日志系统有很多" 无用的 "调用.这些调用不会导致任何写作活动.
是否有更好的方法来打开/关闭日志类型,没有这些#ifdef和#endif AND这些" 无用 "的调用?
我正在使用Fedora 20.我需要在启动结束时运行两行bash脚本.我想让它在每次机器启动时自动运行.我怎样才能做到这一点?
我试过"sudo crontab -e"来插入我的可执行脚本,但它总是给我错误,告诉我时间不对,无法修改文件.
我有一个IP地址的格式化文本字段:
ipmask = new MaskFormatter("###.###.###.###");
ipmask.setPlaceholderCharacter(' ');
field = new JFormattedTextField(ipmask);
Run Code Online (Sandbox Code Playgroud)
field.setValue("111.222.333.444"); 工作,但
field.setValue(" 10.222.333.444"); 不起作用
field.setValue("10 .222.333.444"); 不起作用
field.setValue("10.222.333.444"); 不起作用
设定价值的正确方法是什么?
刚刚加入了一个新项目,他们正在使用VC#2008构建一个应用程序.现在,在一个项目下有几个组件和许多文件.我被要求设置一台构建机器来开始每日构建.我被告知要做的第一件事是编写批处理文件来调用csc.exe来手动创建可执行文件而不安装VC#2008.
我是C#的新手,我不知道解决方案.我知道旧的VC++可以为我们创建一个makefile来进行手动构建.VC#2008是否具有类似的功能?任何信息和链接将不胜感激.
在windowsxp中,我使用"del/s/q myfolder"删除一个大文件夹.它将列出要删除的所有文件和文件夹.有没有办法避免那个长显示列表?谢谢,
在C#中我们可以像C++一样执行以下操作吗?
public void myMethod(int i, MyClass obj, int value=100){
}
Run Code Online (Sandbox Code Playgroud)
另一个问题是MyClass是一个引用类型,如果ref之前没有它,它会将MyClass的副本传递给方法而不是引用?
谢谢,