想象一下以下情况:
class IAlarm : public boost::enable_shared_from_this<IAlarm> {
boost::shared_ptr<IAlarm> getThisPointerForIAlarm() {
return shared_from_this();
}
void verifyThis(int); // called by Device
};
class Alarm : public IAlarm {
Alarm( boost::shared_ptr< Device > attachedDevice){
attachedDevice->attachAlarm(this->getThisPointerForIAlarm());
}
void sendAlarm(){
attachedDevice->Alarm();
}
};
class Device {
attachAlarm( boost::shared_ptr< IAlarm > ia){
this->alarm=ia;
}
};
Run Code Online (Sandbox Code Playgroud)
我想将警报连接到设备.警报和设备不允许彼此了解(这将最终呈现循环依赖性).这就是我使用Interface Class IAlarm的原因.最后,我希望能够将多个警报附加到一个设备上.警报可以访问它们所连接的设备,设备可以在附加的警报上开始验证
一切都很好.但是,如果我尝试将警报连接到设备,我会得到以下信息:
boost::shared_ptr<Device> ptrDevice(new Device());
boost::shared_ptr<IAlarm> ptrAlarm(new Alarm( ptrDevice ));
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_weak_ptr> >'
what(): tr1::bad_weak_ptr
Run Code Online (Sandbox Code Playgroud)
究竟是什么问题?在使用boost::shared_ptr引用和纯指针之前,此设置或多或少有效.是否有可能使这项工作boost:shared_ptr?
我需要在它自己的端口上运行我的服务器应用程序的多个实例.如果我用os.system或subprocess.Popen启动它们不是问题,但是我希望与多处理进行一些进程通信.
我想以某种方式动态设置从不同的进程中侦听不同的端口.只是调用reactor.listenTCP不会这样做,因为我在停止反应堆时变得奇怪的Errno 22.我也很确定这不是正确的做法.我找了一些例子,但找不到任何东西.任何帮助表示赞赏.
编辑:谢谢Tzury,它有点像我想要的.但我必须动态添加端口来监听.例如
from twisted.internet import reactor
from multiprocessing import Process
def addListener(self, port, site):
''' Called when I have to add new port to listen to.
site - factory handling input, NevowSite in my case'''
p = Process(target=f, args=(port, func))
p.start()
def f(self, port, func):
''' Runs as a new process'''
reactor.listenTCP(port, func)
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来整齐地停止这样的过程.只是调用reactor.stop()停止子进程不会这样做.
这是我试图停止进程时遇到的错误
--- <exception caught here> ---
File "/usr/share/exe/twisted/internet/tcp.py", line 755, in doRead
skt, addr = self.socket.accept()
File "/usr/lib/python2.6/socket.py", line 195, in accept
sock, addr …Run Code Online (Sandbox Code Playgroud) 我正在尝试进行单元测试,使用VS单元测试设备跟随方法.
void Get(string name, Action<string> callBack);
Run Code Online (Sandbox Code Playgroud)
这是单元测试仪
[TestMethod]
public void Test()
{
Action<string> cb = name =>
{
Assert.IsNotNull(name);
};
var d = new MyClass();
d.Get("test", cb);
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是内部实现使用BackgroundWorker,因此在另一个线程上调用回调.这是内部实施.
public void Get(string name, Action<string> callBack)
{
callBackString = callBack;
GetData(name);
}
private void GetData(string name)
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += bw_DoWork;
bw.RunWorkerCompleted += bw_RunWorkerCompleted;
bw.RunWorkerAsync(name);
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//do work here
if (null != callBackString)
callBackString("ok");
}
Run Code Online (Sandbox Code Playgroud)
当然因为Get()立即返回,测试完成并且测试停止,因此RunWorkerCompleted永远不会被执行.我可以通过普通应用程序(WPF)轻松测试它,因为它仍在运行,但我希望能够对此进行单元测试.
有任何想法吗?提前致谢.
我在使用Hibernate创建子查询时遇到问题.不幸的是,Subqueries类几乎完全没有文档,所以我完全不知道如何将以下SQL转换为Hibernate Criteria:
SELECT id
FROM car_parts
WHERE car_id IN ( SELECT id FROM cars WHERE owner_id = 123 )
Run Code Online (Sandbox Code Playgroud)
我希望以下内容"正常工作":
session.createCriteria(CarParts.class).add(eq("car.owner", myCarOwner));
Run Code Online (Sandbox Code Playgroud)
但遗憾的是它没有.所以看来我实际上必须使用Subqueries类来创建Criteria.但我无法找到一个合理的例子,但是这导致我在这里问它.
这个问题来自针对我创建的对象的代码分析.分析说我应该捕获一个比基本异常更具体的异常类型.
您是否发现自己只使用捕获通用异常或尝试捕获特定异常并使用多个catch块默认为一般异常?
有问题的代码块之一如下:
internal static bool ClearFlags(string connectionString, Guid ID)
{
bool returnValue = false;
SqlConnection dbEngine = new SqlConnection(connectionString);
SqlCommand dbCmd = new SqlCommand("ClearFlags", dbEngine);
SqlDataAdapter dataAdapter = new SqlDataAdapter(dbCmd);
dbCmd.CommandType = CommandType.StoredProcedure;
try
{
dbCmd.Parameters.AddWithValue("@ID", ID.ToString());
dbEngine.Open();
dbCmd.ExecuteNonQuery();
dbEngine.Close();
returnValue = true;
}
catch (Exception ex)
{ ErrorHandler(ex); }
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
感谢您的意见
编辑:这是代码分析的警告
警告351 CA1031:Microsoft.Design:修改"ClearFlags(字符串,GUID)"捕获超过"异常"更具体的异常或重新抛出异常
在WinForms中,用户更改了TextBox中的文本后,我可以处理Validated事件以执行某些操作。与TextChanged不同,Validated不会在每次字符更改时触发;仅在用户完成后才触发。
我可以使用WPF中的任何东西来获得相同的结果,只有在用户完成更改文本后才引发的事件?
我有一个DateTime对象,可能已经或可能没有包含一些日期/时间信息.因此,我需要将时间替换为与日期无关的新时间,反之亦然.我怎么做到这一点?除了创建两个新的DateTime对象之外,我看不到任何明显的东西,一个具有旧/新日期,另一个具有旧/新时间和连接.肯定有比这更好的方法吗?
我试图将各种函数的输出连接到一个文本框中,但它都出现在一个biiig行中.如何在变量之间插入断行?我有这样的事情:
Me.TextBox.text = output1 + output2
Run Code Online (Sandbox Code Playgroud)
我希望有这样的事情:
Me.TextBox.text = output1 + ENTER + output2
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢!
您是否知道用Java/J2ME编写的运行时,它能够读取和执行脚本/二进制文件?
在Linux上使用Mono,有没有办法创建一个独立的可执行文件,它将在没有安装单声道的系统上运行?