Tag: 缓冲

如何使用SwingWorker模拟缓冲的外围设备?

我将这个练习作为一个教学工具来帮助我刻录一些Java GUI编程概念。 我在寻找的是一个普遍的理解,而不是一个具体问题的详细解决scheme。 我期望编写这个“正确的”将教会我很多关于如何处理未来的multithreading问题。 如果这个论坛太笼统,可能属于程序员? 我正在模拟一个读卡器。 它有一个graphics用户界面(GUI),允许我们将卡片加载到漏斗中,然后按下开始(Start)等,但其主要的“客户端”是CPU,运行在单独的线程和请求卡上。 读卡器维护一个缓冲区。 如果卡片请求进来,而且缓冲区是空的,读卡器必须从漏斗读取一张卡片(这需要1/4秒钟,这是1962年)。 卡被读入缓冲区后,读卡器将缓冲区发送给CPU,并在下一个请求之前立即启动另一个缓冲区加载操作。 如果不仅缓冲器是空的,而且料斗中没有卡片,那么我们必须等到操作员在料斗中放置了一个平台并按下开始(总是启动缓冲器加载操作)。 在我的实现中,卡片请求以invokeLater()方式发送到读卡器,在EDT上排队运行。 在myRunnable.run()时间,一个缓冲区将是可用的(在这种情况下,我们可以把它发送到CPU,并启动另一个缓冲区加载操作),或缓冲区将是空的。 如果它是空的呢? 两种可能性:(a)飞行中已经有一个缓冲载入操​​作,或者(b)卡片仓是空的(或尚未启动)。 无论哪种情况,保持美国东部时间都是不可接受的。 工作(和等待)必须在后台线程上完成。 为了简单起见,我试图产生一个SwingWorker来响应每个卡请求,而不pipe缓冲区的状态如何。 伪代码是: SwingWorker worker = new SwingWorker<Void, Void>() { public Void doInBackground() throws Exception { if (buffer.isEmpty()) { /* * fill() takes 1/4 second (simulated by Thread.sleep) * or possibly minutes if we need to have another * […]

stdout行默认情况下缓冲,无缓冲或不确定?

c99 7.9.13/7节规定: 在程序启动时,三个文本stream是预定义的,不需要明确打开 – 标准input(用于读取常规input),标准输出(用于写入常规输出)和标准错误(用于写入诊断输出)。 最初打开时,标准错误stream没有被完全缓冲; 标准input和标准输出stream是完全缓冲的,当且仅当stream可以被确定为不涉及交互设备时。 所以这是有道理的。 如果您将标准输出推送到文件中,则需要将其完全缓冲以提高效率。 但是当我们无法确定设备是否是非交互式(即正常输出到terminal)时,在标准中没有提到输出是线路缓冲还是无缓冲。 我问的原因是我的答案在这里 ,我应该插入一个fflush(stdout); 两个陈述之间: printf ("Enter number> "); // fflush (stdout); needed ? if (fgets (buff, sizeof(buff), stdin) == NULL) { … } 因为我没有用换行符终止printf 。 任何人都可以清除这个?

为sys.stdin设置较小的缓冲区大小?

我用下面的bash命令模式运行memcached: memcached -vv 2>&1 | tee memkeywatch2010098.log 2>&1 | ~/bin/memtracer.py | tee memkeywatchCounts20100908.log 尝试追踪无与伦比的获取设置密钥平台广泛。 memtracer脚本如下,并按需要工作,只有一个小问题。 看到中间日志文件大小,memtracer.py不会开始获取input,直到memkeywatchYMD.log大小约为15-18K。 有没有更好的方式来读取标准input或者可能的方式来减less缓冲区大小下降到1K以下更快的响应时间? #!/usr/bin/python import sys from collections import defaultdict if __name__ == "__main__": keys = defaultdict(int) GET = 1 SET = 2 CLIENT = 1 SERVER = 2 #if < for line in sys.stdin: key = None components = line.strip().split(" […]

一种用于膨胀/缩小(偏移,缓冲)多边形的algorithm

我怎样“膨胀”一个多边形? 也就是说,我想要做类似的事情: 要求是新的(充气的)多边形的边/点与旧的(原始的)多边形的距离相同(在他们不是的示例图片上,因为那么它将不得不使用弧来填充顶点)现在忘了这个;))。 我正在寻找的math术语实际上是向内/向外的多边形偏离 。 为了指出这一点,给balint +1。 替代的命名是多边形缓冲 。 我的search结果: 这里有一些链接: 多边形切断策略综述 多边形偏移,PROBLEM caching多边形数据

BufferedWriter不会将所有内容写入输出文件

我有一个Java程序,从文件中逐行读取一些文本,并将新文本写入输出文件。 但是在程序结束之后,并不是所有写入我的BufferedWriter的文本都出现在输出文件中。 这是为什么? 细节:程序将一个CSV文本文档转换成SQL命令,将数据插入到一个表中。 该文本文件有超过10000行看起来类似于以下内容: 2007,10,9,1,1,1006134,19423882 该程序似乎工作正常,除了它只是通过创build一个新的SQL语句已经将其打印到SQL文件中的半途停止在文件中。 它看起来像这样: insert into nyccrash values (2007, 1, 2, 1, 4, 1033092, 259916); insert into nyccrash values (2007, 1, 1, 1, 1, 1020246, 197687); insert into nyccrash values (2007, 10, 9, 1 这发生在约10000行之后,但在文件结束之前的几百行。 发生中断的地方在1和1之间。 但是,字符似乎并不重要,因为如果我将1更改为42则写入新文件的最后一个内容是4 ,即从该整数中切掉2。 所以读者或写作者在写作/阅读一定量之后似乎就要死去了。 我的Java代码如下: import java.io.*; public class InsertCrashData { public static void main (String […]

JTextFields在JPanel上的活动绘图之上,线程问题

有没有人曾经试图使用Swing构build一个适当的多缓冲渲染环境, 在其上面可以添加Swing用户界面元素 ? 在这种情况下,我有一个在背景上绘制的animation红色矩形。 背景不需要每一帧更新,所以我把它渲染到一个BufferedImage上,只重绘清除矩形前一个位置所需的部分。 请参阅下面的完整代码,这扩展了上一个线程中的@trashgod给出的示例。 到现在为止还挺好; animationstream畅,CPU使用率低,不闪烁。 然后,我将JTextField添加到Jpanel(通过单击屏幕上的任何位置),然后通过在文本框内单击来关注它。 清除矩形的前一个位置现在在每个光标闪烁时都失败,请参阅下面的图像。 我很好奇,如果有人知道为什么会发生这种情况(Swing不是线程安全的?图像被asynchronous绘制?)以及在什么方向寻找可能的解决scheme。 这是在Mac OS 10.5,Java 1.6上 JPanel重绘失败http://www.arttech.nl/javaredrawerror.png import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Insets; import java.awt.Rectangle; import java.awt.Transparency; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.JPanel; import […]

禁用输出缓冲

Python的sys.stdout解释器默认启用输出缓冲吗? 如果答案是肯定的,那么禁用它的方法是什么? 迄今为止的build议: 使用-u命令行开关 将sys.stdout包装在每次写入后刷新的对象中 设置PYTHONUNBUFFERED env var sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) 有没有其他的方法来设置一些全局的标志在sys / sys.stdout编程执行期间?

Winforms双缓冲

我把这个添加到我的表单的构造函数代码中: this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true); 但是,当它加载控件时,它仍然显示丑陋的文物,只要它们改变(表单及其组件更改(需要更新))。 我需要做什么不同?