5

我正在调试一些键盘事件代码,我想循环睡眠(让我有机会创建键盘事件),但是当我这样做时,Pharo 不会让我用 Command- 退出。所以调试很困难。我不得不等待 500 秒才能修复下面代码中的某些内容...

100 timesRepeat: [ 
    Transcript show: 'Type an a... '.
    (Delay forSeconds: 5) wait.
    (Sensor keyPressed: $a) ifTrue: [ Transcript show: 'you pressed a' ].
]

那么我怎样才能使Command-. 工作,还是有比这更合适的东西(Delay forSeconds: 5) wait.

4

3 回答 3

1

在 Mac OS X 上的 Squeak 中工作正常(使用peekKeyboardEvent,它没有keyPressed:)。所以这不是你的代码的错,中断它应该可以正常工作。

于 2013-05-07T07:55:09.783 回答
1

我并不完全确定这在 Pharo 中有效,但在 Squeak 中,您可以在新进程中分叉您的代码,因此它不会阻塞 UI:

[
    100 timesRepeat: [ 
        Transcript show: 'Type an a... '.
        (Delay forSeconds: 5) wait.
        (Sensor keyPressed: $a) ifTrue: [ Transcript show: 'you pressed a' ].
    ].
] fork.
于 2013-07-03T09:33:12.093 回答
0

我刚开始使用 Pharo,看来您真正遇到的问题仍然是初学者(包括我自己)的问题。查看您的代码,您似乎希望Transcript每 5 秒更新一次。以下是如何做到这一点(包括评论以明确某些细微差别)。

| process | "If you're running outside a playground, you should declare the variable, otherwise you should not declare it because it needs to bind to the playground itself"

process := [ 
    100 timesRepeat: [ 
        Transcript show: 'Type an a... '; cr. "I like a newline, hence the cr"
        (Delay forSeconds: 5) wait.
        "In Pharo 10, the following doesn't work, still need to figure out how to do this"
        "(Sensor keyPressed: $a) ifTrue: [ Transcript show: 'you pressed a' ]."
    ]
] fork.

process terminate. "You can run this to terminate the process inside the playground"
process suspend. "Also possible"
process resume. 
于 2021-12-16T12:19:21.173 回答