2010-06-11 73 views
1

我写了两个小脚本,F#脚本到应用程序

第一个维护一组证券的当前股票价格字典。我正在使用递归来侦听命名管道。每当名称管道上有可用的东西时,它就会更新安全价格并立即返回并开始监听管道。

第二个定期读取股价从第一个节目的价格缓存一些安全的,并执行来计算。

但我不知道如何让这两个程序进行通信。我不知何故需要让我的第二个程序启动第一个程序,让它在后台运行并在需要时获得价格。

有人能指出我正确的方向吗?

谢谢 -Sudaly

回答

3

他们是否是独立的程序/脚本?

如果不是这样,我会把它们放在同一个程序,并使用异步/代理运行两个任务。

下面是该战略的启动,博客:

http://blogs.msdn.com/b/dsyme/archive/2010/02/15/async-and-parallel-design-patterns-in-f-part-3-agents.aspx

基本上一个代理只是位于一个循环:从管道异步读取,更新价格

其它药剂位于一个循环:睡一段时间,阅读价格并做计算。或者,这可能只是同步的“主程序”循环。

(根据数据结构,你可能会或可能不会需要协调处理,而其他正在更新一个代理读取。)

事实上,你甚至不需要代理,可以只运行异步在背景中。类似于

// first script 
let mutable lastPrice = 0.0 
async { 
    while true do 
     let! nextval = namedPipe.AsyncRead() 
     lastPrice <- nextVal 
} |> Async.Start 
// second script 
while true do 
    System.Threading.Thread.Sleep(1000) 
    printfn "%f" (calc lastPrice) 

如果有帮助。

+0

嗯......他们没有要目前单独的计划。但在将来,我可能不得不编写一些其他可以使用价格缓存的应用程序。所以我想只保留价格缓存程序的一个实例,并能够通过多个程序进行引用。 但现在,您的解决方案已足够。谢谢回复 – sudaly 2010-06-11 21:51:47

2

方法有很多种。

  1. .NET远程
  2. 管道上盘
  3. 文本文件
  4. 中介服务(Web或本地)
  5. WCF