challenge 出力の一時停止と再開

起動すると、標準出力に1秒毎に'a'の1文字を出力し続けるプログラムで、 以下の条件を満たすものを「どう書く?」

  • 'q'キーが押されるとプログラムは終了する
  • 出力中に'p'キーが押されると一時停止する
  • 一時停止中に'p'キーが押されると出力を再開する

Posted feedbacks - Ruby

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
require 'Win32API'

GetKeyState = Win32API.new('user32', 'GetKeyState', 'I', 'I')

pause = false

Thread.start {
  loop {
    print 'a' unless pause
    sleep 1
  }
}

loop {
  key_state = {:p => (GetKeyState.call(?P)[7] == 1),
               :q => (GetKeyState.call(?Q)[7] == 1)
  }
  exit if key_state[:q]
  if key_state[:p]
    pause = !pause
    sleep 0.3
  else
    sleep 0.1
  end
}

pキーの長押し時、動作に不具合があったので修正しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
require 'Win32API'

GetKeyState = Win32API.new('user32', 'GetKeyState', 'I', 'I')

pause = false
can_toggle_pause = true

Thread.start {
  loop {
    unless pause
      print 'a'
      sleep 1
    else
      sleep 0.1
    end
  }
}

loop {
  key_state = {:p => (GetKeyState.call(?P)[7] == 1),
               :q => (GetKeyState.call(?Q)[7] == 1)
  }
  exit if key_state[:q]
  if key_state[:p]
    if can_toggle_pause
      pause = !pause
      can_toggle_pause = false
    end
  else
    can_toggle_pause = true
  end
  sleep 0.05
}

Index

Feed

Other

Link

Pathtraq

loading...