如何从另一个线程中断ReadLn

时间:2013-03-13 16:01:17

标签: multithreading console-application pascal freepascal

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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