- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我从一个带有curses的python程序开始,然后我实现了线程,一个线程接受输入(这里是A和D按钮)并相应地更改x。然后主 block 不断地将 x 的值显示到屏幕上。但是,x(全局共享变量)的值不同。特别是,主 block 测量的 x 值总是滞后于 inputThread 的值,但 inputThread 的响应是完美的。是什么赋予了?如何让主 block 读取由 inputThread 测量的 x 的真实值?
import time
import curses
import threading
from curses import wrapper
from time import sleep
def inputThread(stdscr):
global x
x = 0
while True:
c = stdscr.getch()
curses.flushinp()
if c == ord('a'):
x -= 1
elif c == ord('d'):
x += 1
stdscr.addstr("inputThread:" + str(x) + "\n" + "c:" + str(c))
def main(stdscr):
curses.initscr()
stdscr.clear()
t = threading.Thread(target=inputThread, args=(stdscr,))
t.setDaemon(True)
t.start()
while True:
stdscr.clear()
stdscr.addstr("\ndisplay window:" + str(x) + "\n")
time.sleep(0.05)
wrapper(main)
示例输出;下一次按键时,无论是 A 还是 D,显示窗口将报告 9。
最佳答案
首先,您的全局变量x
应该在所有函数之外声明,但您已在inputThread
函数内部声明了它。 global x
告诉我们,它将使用并更改全局变量 x
的值,而不是在函数作用域内创建另一个变量。因此 delcare 并在其他函数之外用 0
初始化 x
。
现在你的问题来了。假设当守护进程和主线程一起运行时,守护进程方法只是停留在 c = stdscr.getch()
等待按键,而 while
在你的内部循环。主线程中的 main 函数什么也不做,只是用文本 display window: 0
更新屏幕,您看不到它,因为屏幕在 0.05s
内变得清晰FPS 太快看不清屏幕。
现在,当您键入这些 a 或 d
键时,守护进程会更新全局变量 x
的值,但在主线程获取该值之前,它会被打印虚拟屏幕为 InputThread:*
和 c:***
,在这种情况下,主线程仅打印先前的值 0
。因此,解决方法是在更新 x
后让守护线程休眠一段时间,同时主线程内的循环将导致显示新更新的 x
值。这可以通过以下方式完成:
import time
import curses
import threading
from curses import wrapper
from time import sleep
x = 0
def inputThread(stdscr):
global x
while True:
c = stdscr.getch()
curses.flushinp()
if c == ord('a'):
x -= 1
elif c == ord('d'):
x += 1
sleep(0.05)
stdscr.addstr("inputThread:" + str(x) + "\n" + "c:" + str(c))
def main(stdscr):
curses.initscr()
stdscr.clear()
t = threading.Thread(name ='daemon', target=inputThread, args=(stdscr,))
t.setDaemon(True)
t.start()
while True:
stdscr.clear()
stdscr.addstr("\ndisplay window:" + str(x) + "\n")
sleep(0.05)
wrapper(main)
希望有帮助。
关于Python 诅咒、线程 : Output thread reports a lagging value for global variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48180414/
library(dplyr) library(stats) 我正在使用滞后变量运行大量回归,并且我的 R 控制台与上述包有冲突。我知道我可以通过为每次回归输入“dplyr::lag()”来规避这个问题
正如标题所说。加载 pglm 后,lag 停止正常工作。 library(pglm) c(1,2,3,4) %>% lag() 该对象被转换为时间序列,并且不再与 tibbles 兼容。 即使卸载pg
正如标题所说。加载 pglm 后,lag 停止正常工作。 library(pglm) c(1,2,3,4) %>% lag() 该对象被转换为时间序列,并且不再与 tibbles 兼容。 即使卸载pg
我目前正在为我的投资组合网站构建一个修改后的光标。不幸的是,当我尝试滚动和移动光标时,我的光标出现滞后。但是,当我从 HTML、CSS 和 JavaScript 中删除所有其他元素并且只有与我的光标相
如果浏览器应用程序执行计算量较大或阻塞的操作,则事件循环将会延长。 有没有办法获得有关事件循环长度的定性指标? 这是为了衡量客户端 Web 应用程序在客户端上呈现的“容易程度”(即是否有足够的计算资源
我有一个问题。我正在 tkinter 中制作平台游戏,但遇到问题:我现在有:玩家、积木和硬币。我正在更新玩家的 Action 及其动画和硬币的动画,由于某种原因,当我投入太多硬币时,玩家的 Actio
我有一个包含 3 个 fragment 的 ViewPager Fragment。每个都有一个图像作为背景和一个 TextView。 TextView 始终绝对位于屏幕左侧(而不是 Fragment
当我尝试在 CLOB 列上使用 LAG 函数时遇到问题。 假设我们有一张 table create table test ( id number primary key, not_cl
您好,我是 SQL 的新手,希望有人能帮助我解决这个问题。我一直在这里和那里使用滞后函数,但想知道是否有办法重写它以使其进入总和范围。因此,我想将前 12 个月的每个时间段加在一起,而不是之前的一个月
我清楚地记得 T-SQL 永远不会让您混合使用 LAG 和 WHERE。例如, SELECT FOO WHERE LAG(BAR) OVER (ORDER BY DATE) > 7 永远不会工作。无论
我的数据文件是许多结构相似的文本文件的合并: 行“新文件开始”, 行与文件名, “数据线”有两列:域和事件数 每个文件的此类“数据行”数量可能从 0 到数十万不等目标是添加新列,每一行将指示它相关的文
我正在尝试在 R 中复制以下公式: Xt = Xt-1 * b + Zt * (1-b) 我正在使用以下代码 t %>% mutate(x= ifelse(week == 1, z, NaN))
我今天来找你是因为我正在努力处理涉及 LAG 函数的查询(仅供引用,我使用的是 PostgreSQL)。我有一张表格,其中包含每月按国家/地区销售给另一个产品的产品数量。该表定义如下: create
当我尝试在 tibble 中的一列字符上使用滞后函数(来自 dplyr 库)时,我在 R 中遇到以下错误: Error in mutate_impl(.data, dots) : Expecting
我有两个向量,subject 和 target。我想根据两个现有向量之间的比较创建一个新向量,比较元素 lagged。我已经使用下面的循环解决了这个问题,但我本质上想知道是否有使用 apply 的更优
我有一个日期表,我需要在其中存储前一行的 val当前行中的列。但是,我不能使用 LAG子句,因为存在缺失的日期,并且只有在前一个直接日期存在时才应提取前一个值并将其存储在当前行中。因此我必须(我认为)
我是 SQL Server 的新手,我对 lag() 函数有一些疑问。 我必须计算两个用户事件之间的平均距离(以天为单位)。然后,我必须对所有用户进行 GROUP BY,计算每个用户行之间的所有日期差
嗨,我正在我的网络应用程序中实现实时搜索(=输入时搜索)功能。目前我正在使用 keyup 事件通过 ajax post 发送搜索请求,例如 $('#SearchField').keyup(functi
这里可能存在 BigQuery 错误?我正在运行一个查询,该查询使用 LAG() 函数来获取先前的时间采样值。例子: 架构: id: STRING time: TIMESTAMP 询问: SELECT
如何告诉 LAG 函数获取最后一个“非空”值? 例如,请参阅下面的表,其中 B 列和 C 列上有一些 NULL 值。我想用最后一个非空值填充空值。我尝试使用 LAG 函数来做到这一点,如下所示: ca
我是一名优秀的程序员,十分优秀!