2013-05-09 3 views
-2

В этом вопрос. Я вызвал функцию, используя поток, но когда я вернусь к основному управлению, в течение нескольких мгновений основное состояние переходит в состояние сна.Почему статус потока мертв?

Пример (Look здесь это линия, которая вызывает функцию Win32API GetMessage):

Start() 
e = Thread.new { Look() } 
for _i in 0..1000 
    puts e.status 
end 

Этот код должен напечатать e «s статус 1000 раз, но он просто печатает один раз. Я не могу найти разумную ошибку. Look не возвращается, пока не получит сообщение, поэтому я подозреваю, что это может вызвать ошибку.

+0

вы бы лучше показать нам код' Look' –

ответ

0

Моя догадка заключается в том, что статус e равен nil, который puts отображается как пустая строка.

Состояние nil означает, что нить прекращена ненормально.

Что-то не так, ваш код печатает что-то 1000 раз, и вы должны поместить некоторые видимые тексты в puts, чтобы показать это.

Кроме того, вместо того, чтобы использовать бросок одноразовая переменной _i, написать

1000.times do 
    puts e.status 
end 
+0

мне кажется, 'puts' покажет' nil' в консоли вместо пустой строка –

+0

@BobCromwell: 'puts nil.to_s.inspect' производит' '' ' – Borodin

+0

вы правы в своем заявлении, однако' puts nil' производит 'nil'. –

0

Я решил спасибо за вашу помощь, ошибка была в том, что мне нужно изменить только GetMessageA для PeekMessage так нитку Безразлично «т интерпретировать умерший Jeje

Some.Proxy

Смежные вопросы