【问题标题】:How to interrupt ReadLn from another thread如何从另一个线程中断 ReadLn
【发布时间】:2013-03-13 16:01:16
【问题描述】:

在 Free-Pascal 中,我将创建一个跨平台控制台程序,它将在一堆线程 (TThread) 中完成大部分工作。

主程序仅用于不时接收一些用户命令并执行这些命令(并保持整个程序运行)。

这个循环作为程序的主循环在 Windows 和 Linux 上都能完美运行,无需使用 cpu:

repeat
  Write('> ');
  ReadLn(s);
  // execute command
until s='exit';

但是我需要线程来命令主程序做一些工作。这意味着我需要一种方法来阻止另一个线程的 ReadLn 继续并检查命令标志。如果我能以某种方式发送一个 Enter 键来欺骗 ReadLn 结束它会很好。

是否有其他方法可以创建一个跨平台主循环,该循环侦听用户字符串或按键,同时可以从其他线程命令?

【问题讨论】:

  • 为什么线程不能工作?
  • 我们明白了,但是如果有工作要做,为什么'主程序'必须做呢?为什么线程做不到?
  • 评论 #2 是针对已消失的 Q。线程可能会完成这项工作,但其中一项工作需要向控制台写入大量状态,同时不需要用户输入。所以无论如何都需要中断 ReadLn。

标签: multithreading console-application pascal freepascal


【解决方案1】:

是的,使用单位键盘。这种抽象的键盘支持允许查看事件(键),这意味着线程中的布尔集可以使其退出循环。

请参阅 (rtl) 手册中的键盘单元和标准 FPC 安装附带的文本控制台游戏(fpctris、samegame)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    相关资源
    最近更新 更多