gpt4 book ai didi

python - 如何连续收听DDE数据

转载 作者:行者123 更新时间:2023-12-05 03:19:06 25 4
gpt4 key购买 nike

寻找 python 或 R 解决方案。


在 R 中,我能够使用以下请求从第三方应用程序将 DDE 数据检索到 R 中:

library(tcltk2)
tk2dde.request(service = 'prortdde',topic='MNQXXXX', item='last')
"12262.75"

我想不断更新这些数据。我如何创建某种可以记录所有更改的 dde ​​服务器或消息系统?

在循环中包含上述内容意味着在更新速度快于循环执行时丢失数据...感谢您的帮助。


在 python 中,这是我当前的工作代码:

import win32ui
import dde

s=dde.CreateServer()
s.Create("prortdde")
c=dde.CreateConversation(s)
c.ConnectTo("prortdde", "MNQXXXX")
c.Connected()
c.Request("last")
# "12262.75"

但这也会遗漏同时更新的值(这种情况经常发生)。我需要的是某种类型的消息传递系统,它可以存储所有值,甚至是同时生成的值,以便我以后可以检索它们。使用 DDE 可以吗?

最佳答案

我对 R 语言一无所知。我刚刚设法将这个弗兰肯斯坦怪物放在这里,为您的问题创建一个生产者-消费者范式。

计划是运行一个非阻塞线程,该线程将不断轮询您正在寻找的值,并使用生产者非阻塞函数 prortdde_produce_continuously data_in_stock。然后等待您使用 prortdde_consume_one 函数轻松使用这些值,该函数返回最新的未使用值(如果有)或最新已使用的 old_value

为了演示,我做了一个十次迭代的循环,每 5 秒打印一次最新的未使用值。 (我对你的申请一无所知,我在沙子上画线作为时间估计)。

一旦您希望看到无限生产循环停止,只需将标志 keep_consuming 设置为 FALSE

此代码未经测试。对此感到抱歉。

library(tcltk2)
library(future)

data_in_stock <- list()
old_value <- ""
keep_producing <- TRUE
last_consumed_value <- ""

prortdde_produce_continuously %<-% {
while (keep_producing) {
new_value <- tk2dde.request(service = 'prortdde', topic='MNQXXXX', item='last')
if (new_value != old_value) {
# The new value does not have to be pushed to `data_in_stock`
data_in_stock <- append(data_in_stock, new_value)
old_value <- new_value
}
# Wait for 0.1 seconds (I don't know how fast your data changes)
sys.sleep(0.1)
}
}

prortdde_consume_one <- function(){
if (length(data_in_stock) > 0) {
last_consumed_value = data_in_stock[1]
data_in_stock[[1]] <- NULL
return(last_consumed_value)
}
return(old_value)
}

# According to documentation, this line allows the non-blocking execution to happen
plan(multiprocess)

# Keeps polling and `producing` them indefinitely
prortdde_produce_continuously()

# Consumes 10 values
for (val in 1:10) {
print(prortdde_consume_one)
sys.sleep(5)
}

# Tells the `producing` to stop
keep_producing <- FALSE

关于python - 如何连续收听DDE数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73521573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com