2010-11-08 38 views
5

Tôi cần chạy ứng dụng Ruby trên máy tính của khách hàng. Nó thường sẽ mất một vài ngày để hoàn thành (sao chép các tập tin sao lưu lớn). Vấn đề là nếu ngủ được kích hoạt, nó sẽ làm gián đoạn ứng dụng. Nếu không phải máy tính sẽ ở lại trong nhiều tuần cho đến lần truy cập tiếp theo của tôi. Có cách nào để ngăn chặn giấc ngủ trong khi thực hiện và để Windows ngủ sau đó không?Dừng máy tính Windows 7 chuyển sang chế độ ngủ trong khi chương trình Ruby thực hiện

Bất kỳ ý tưởng điên được hoan nghênh ;-)

Trả lời

0

tôi không làm được gì nhiều trên nền tảng Windows, nhưng các phương pháp sau đây có vẻ hợp lý:

  1. Trong chương trình của bạn, sử dụng bất cứ điều gì libs ruby ​​có sẵn cho nền tảng cửa sổ để kiểm tra xem tự động tạm ngưng/ngủ có được bật hay không.
  2. Nếu được bật, hãy tắt tính năng này.
  3. Chạy các tác vụ dài của bạn.
  4. Khi đã xong, kích hoạt lại tự động đình chỉ/ngủ

Bạn có lẽ sẽ cần thêm một số logic thêm để kích hoạt lại tự động đình chỉ nếu lỗi chương trình của bạn ra.

Ngoài ra, ứng dụng có thể cần phải chạy trong tài khoản có quyền truy cập để bật/tắt tự động tạm ngưng.

Hy vọng điều này sẽ hữu ích!

2

Nếu đây là một chương trình dòng lệnh, sau đó bạn có thể gửi lệnh từ Ruby vào dòng lệnh sử dụng backticks như thế này

puts `command here` 

như vậy thì bạn có thể thiết lập máy tính để không ngủ bằng cách gửi lệnh này

c:\windows\system32\powercfg.exe -change -standby-timeout-ac 0

như thế này

puts `c:\\windows\\system32\\powercfg.exe -change -standby-timeout-ac 0` 

Bạn phải thoát khỏi số \ với số double. Thử nghiệm và làm việc cho tôi, mặc dù trên một máy tính xách tay. Tôi cho rằng nó sẽ hoạt động tương tự trên máy tính để bàn.

Số ở cuối cùng là thời gian tính bằng phút trước khi đưa máy tính vào trạng thái ngủ. Tôi không biết nếu bạn có thể truy xuất giá trị ban đầu, nhưng bạn có thể đặt giá trị đó thành bất kỳ số nào. Do đó, để đưa máy tính vào trạng thái ngủ sau 10 phút, bạn sẽ gửi

puts `c:\\windows\\system32\\powercfg.exe -change -standby-timeout-ac 10` 

Vì vậy, bạn có thể tắt chế độ ngủ ở đầu tập lệnh và bật lại giấc ngủ sau đó.

Hy vọng điều này phù hợp với bạn!

+0

Bạn cũng phải biết thời gian chờ ngủ hiện tại để phục hồi nó đúng cách sau khi chương trình thực thi. – Nakilon

+0

@Nakilon, đó là lý do tại sao tôi đã đề cập rằng tôi không biết liệu có thể truy xuất cài đặt hiện tại hay không. OP không chỉ định một yêu cầu trên mặt trận đó. Điều này sẽ làm việc cho các tiền đề đơn giản của việc ngăn ngừa giấc ngủ, và sau đó cho phép giấc ngủ sau đó để máy không còn lại trong nhiều tuần. –

+0

Ngoài ra, vì OP đã đề cập đến 'tuần cho đến lần truy cập tiếp theo ', anh ta có thể kiểm tra cài đặt ngủ hiện tại theo cách thủ công, và sau đó điều chỉnh thời gian cho lệnh thứ 2 trước khi chạy ứng dụng của mình (giả sử nó không được biên dịch theo cách nào đó). –

6

Here là lời khuyên upvoted sử dụng SetThreadExecutionState WinAPI chức năng, mà cho phép một ứng dụng để thông báo cho hệ thống mà nó được sử dụng, do đó ngăn cản hệ thống từ khi vào giấc ngủ hoặc tắt màn hình khi các ứng dụng đang chạy.
Cái gì như:

require 'Win32API' 
ES_AWAYMODE_REQUIRED = 0x00000040 
ES_CONTINUOUS = 0x80000000 
ES_DISPLAY_REQUIRED = 0x00000002 
ES_SYSTEM_REQUIRED = 0x00000001 
ES_USER_PRESENT = 0x00000004 
func = Win32API.new 'kernel32','SetThreadExecutionState','L' 

func.call(ES_CONTINUOUS|ES_SYSTEM_REQUIRED) 
# doing your stuff... 
func.call(ES_CONTINUOUS) 


Hoặc chỉ cần đặt một cái gì đó trên bàn phím (bạn nói ý tưởng điên được hoan nghênh)

+0

Ngoài ra, nó có thể thực sự thân thiện với người dùng để kiểm tra và xem liệu bạn có đang chạy bằng pin hay bộ sạc không. Nếu đó là một quá trình chạy dài và bạn đang sử dụng pin và bạn không để máy ngủ, bạn có thể tiêu hao pin và khiến mọi thứ bị hỏng. Điều đó sẽ khiến tôi nói những lời xấu. –

+2

Để đi với ý tưởng điên rồ của bạn đặt một cái gì đó trên bàn phím, bạn có thể thiết lập một con chuột quang với laser trên đầu trang của một chiếc đồng hồ analog :) Bằng cách đó bạn không phải lo lắng về đầu vào ngẫu nhiên từ bàn phím –

Các vấn đề liên quan