跟踪内存中的文本字符串

Tracking string of text in memory

我有一个程序可以从另一个程序的内存中读取某些信息。我正在监视的程序基本上输出不断增加的文本量。我希望我的程序在其 UI 中复制此文本。在语法方面,对所有这些进行编码都很好,但考虑到文本在内存中的行为,我正在努力解决如何从逻辑上解决它。下面是我在内存中找到的信息,以及字符串的行为方式。

这是我掌握的信息:

  1. 指向字符串段开头的内存指针
  2. 指向写入的最后一个字节之后的字节的内存指针
  3. 一个指向 int 的内存指针,它告诉我们有多少字节,就是上面的两个

现在我最初做的是存储我读取了多少字节,然后使用每 2 秒触发一次的计时器,只读取我上次读取和结束之间的字节(正如指针 3 所暗示的那样) .

上面的方法在一段随机的时间后崩溃了,因为在写入了随机数的字节后,字符串段实际上回绕并再次从顶部开始写入(指针1指向的位置),覆盖了什么以前在那里。当发生这种情况时,指针 2 和 3 会更新,所以这很好,但我仍然无法弄清楚我应该如何解决它。

我考虑过这种潜在的方法,但发现它是错误的:轮询时,在进行任何其他计算之前,检查到目前为止我读取的字节是否更大大于3所示的字节数。如果是,则将读取的字节数设置为0,并重新从头开始。这种方法的问题是我可能会错过字符串段底部的某些内容,如果在底部写了一些内容,那么在我有机会发现它之前,很快就会写入另一个内容使字符串换行。

如有任何想法、见解提示或解决方案,我们将不胜感激。

最简单的做法是让 Reader 进程每次都读取共享内存的全部内容。然后显示 UI 中的全部文本。不需要 "cursor".

下一个最简单的事情是读取共享内存的全部内容,但是让 Reader 进程保留它读取的最后一堆文本的副本。然后在每次读取之后,它将文本与缓存文本进行比较以确定是否有任何变化。仍然不需要游标。

如果可能,我建议使用更可靠的方式在进程之间共享数据。最终,您将 运行 遇到同步两个进程的问题。最后,您将编写一个进程间通信框架。我认为进程间消息队列的一些简单实现将是这种应用程序的理想选择。