通过增强OrderManager来解决以下同步问题的最佳方法是什么?OrderForm需要获取最新的订单和交易列表并订阅这些事件,而OrderManager通过另一个线程生成订单和交易.
public class OrderManager
{
public event EventHandler<OrderEventArgs> OrderAdded;
public event EventHandler<OrderEventArgs> OrderUpdated;
public event EventHandler<OrderEventArgs> OrderDeleted;
public event EventHandler<TradeEventArgs> TradeAdded;
public List<Order> Orders { get; private set; }
public List<Trade> Trades { get; private set; }
...
}
public class OrderForm
{
public OrderForm(OrderManager manager)
{
manager.OrderAdded += manager_OrderAdded;
manager.OrderUpdated += manager_OrderUpdated;
manager.OrderDeleted += manager_OrderDeleted;
manager.TradeAdded += manager_TradeAdded;
Populate(manager.Orders);
Populate(manager.Trades);
}
...
}
Run Code Online (Sandbox Code Playgroud)
我应该删除事件模式并实现这样吗?还有其他更好的办法?
public class OrderListener
{
public Action<Order> OrderAdded { get; set; }
public Action<Order> OrderUpdated { …Run Code Online (Sandbox Code Playgroud) 我是 Linux 新手。我最近将我的 C++ 窗口服务移植到 Linux 守护进程。
在 Windows 中,我有以下文件夹结构。我发现这个结构很容易让其他同事遵循并升级到新版本。
C:\services\my_app\version_1_0\my_app.exe
C:\services\my_app\version_1_0\my_app.config.xml
C:\services\my_app\version_1_0\dependencies1.dll
C:\services\my_app\version_1_0\log\my_app_20121110.log
C:\services\my_app\version_1_0\data\my_app_data_20121110.txt
C:\services\my_app\start_my_app.bat
Run Code Online (Sandbox Code Playgroud)
我对 Linux 中的部署位置进行了一些研究,发现很混乱:
提前感谢您的帮助。
#include <iostream>
template <typename T>
class test
{
public:
test(T&& t)
{
}
};
template <typename T>
void succeed(T&& t)
{
}
int main()
{
int i = 1;
test<int> t(i); // failed to compile
succeed(i); // OK
return 0;
}
Run Code Online (Sandbox Code Playgroud)
GCC 5.2 中的错误:main.cpp:在函数“int main()”中:main.cpp:20:18:错误:无法将“int”左值绑定到“int&&”测试 t(i);^ main.cpp:7:5: 注意:初始化 'test::test(T&&) [with T = int]' test(T&& t) 的参数 1 ^~~~
有人可以解释为什么类模板无法编译但函数模板可以吗?谢谢。