Re: What functions, other than sleep(), can be interrupted by Ctrl-C?

2009-02-27 Thread James Matthews
You can hook the it on the main thread and just pass it. And let the threads
execute.

On Thu, Feb 26, 2009 at 10:47 PM, Gabriel Genellina
gagsl-...@yahoo.com.arwrote:

 En Thu, 26 Feb 2009 16:17:42 -0200, Maxim Khitrov mkhit...@gmail.com
 escribió:


  I'm looking for a function in the standard library or pywin32 package
 that will block until a certain condition is met or it is interrupted
 by Ctrl-C. For example, time.sleep() would have been perfect for my
 needs if thread.interrupt_main() could interrupt the call from another
 thread in the same way that Ctrl-C does. Unfortunately, that is not
 the case.

 Another thing I tried was creating a pipe with os.pipe() and issuing a
 read call on it. The event to exit was a single byte written to the
 other end of the pipe, but Ctrl-C could not interrupt the read call.
 The threading.Event class does not work for me, because it uses short
 sleep intervals for timed waits. I need the reaction to be as close to
 instant as possible, something like this will not do:

 while not some condition is met:
   sleep(0.01)

 I actually replaced threading.Event with my own version that uses
 native Windows events, and waits on those also cannot be interrupted
 by Ctrl-C. I'm trying to achieve the same effect as that while loop
 and I don't care what the condition to exit is, but the loop needs to
 exit as soon as the condition is met without waiting for up to X
 additional milliseconds. Any ideas?


 You may try MsgWaitForMultipleObjects - send a message to the main thread
 from the other thread.
 An alertable wait (like SleepEx) plus QueueUserAPC should work, I presume,
 but I've never actually tried in Python.

 --
 Gabriel Genellina


 --
 http://mail.python.org/mailman/listinfo/python-list




-- 
http://www.astorandblack.com
--
http://mail.python.org/mailman/listinfo/python-list


Re: What functions, other than sleep(), can be interrupted by Ctrl-C?

2009-02-27 Thread Maxim Khitrov
On Thu, Feb 26, 2009 at 3:47 PM, Gabriel Genellina
gagsl-...@yahoo.com.ar wrote:
 I'm looking for a function in the standard library or pywin32 package
 that will block until a certain condition is met or it is interrupted
 by Ctrl-C. For example, time.sleep() would have been perfect for my
 needs if thread.interrupt_main() could interrupt the call from another
 thread in the same way that Ctrl-C does. Unfortunately, that is not
 the case.

 You may try MsgWaitForMultipleObjects - send a message to the main thread
 from the other thread.
 An alertable wait (like SleepEx) plus QueueUserAPC should work, I presume,
 but I've never actually tried in Python.

I tried using MsgWaitForMultipleObjects, but even with a wake mask of
0x Ctrl-C still did not interrupt the call. Maybe it has to do
with the way pywin32 implements it. QueueUserAPC is not available in
pywin32, but I suppose I can try getting to it via ctypes.

- Max
--
http://mail.python.org/mailman/listinfo/python-list


What functions, other than sleep(), can be interrupted by Ctrl-C?

2009-02-26 Thread Maxim Khitrov
Greetings,

I'm looking for a function in the standard library or pywin32 package
that will block until a certain condition is met or it is interrupted
by Ctrl-C. For example, time.sleep() would have been perfect for my
needs if thread.interrupt_main() could interrupt the call from another
thread in the same way that Ctrl-C does. Unfortunately, that is not
the case.

Another thing I tried was creating a pipe with os.pipe() and issuing a
read call on it. The event to exit was a single byte written to the
other end of the pipe, but Ctrl-C could not interrupt the read call.
The threading.Event class does not work for me, because it uses short
sleep intervals for timed waits. I need the reaction to be as close to
instant as possible, something like this will not do:

while not some condition is met:
   sleep(0.01)

I actually replaced threading.Event with my own version that uses
native Windows events, and waits on those also cannot be interrupted
by Ctrl-C. I'm trying to achieve the same effect as that while loop
and I don't care what the condition to exit is, but the loop needs to
exit as soon as the condition is met without waiting for up to X
additional milliseconds. Any ideas?

- Max
--
http://mail.python.org/mailman/listinfo/python-list


Re: What functions, other than sleep(), can be interrupted by Ctrl-C?

2009-02-26 Thread Gabriel Genellina
En Thu, 26 Feb 2009 16:17:42 -0200, Maxim Khitrov mkhit...@gmail.com  
escribió:



I'm looking for a function in the standard library or pywin32 package
that will block until a certain condition is met or it is interrupted
by Ctrl-C. For example, time.sleep() would have been perfect for my
needs if thread.interrupt_main() could interrupt the call from another
thread in the same way that Ctrl-C does. Unfortunately, that is not
the case.

Another thing I tried was creating a pipe with os.pipe() and issuing a
read call on it. The event to exit was a single byte written to the
other end of the pipe, but Ctrl-C could not interrupt the read call.
The threading.Event class does not work for me, because it uses short
sleep intervals for timed waits. I need the reaction to be as close to
instant as possible, something like this will not do:

while not some condition is met:
   sleep(0.01)

I actually replaced threading.Event with my own version that uses
native Windows events, and waits on those also cannot be interrupted
by Ctrl-C. I'm trying to achieve the same effect as that while loop
and I don't care what the condition to exit is, but the loop needs to
exit as soon as the condition is met without waiting for up to X
additional milliseconds. Any ideas?


You may try MsgWaitForMultipleObjects - send a message to the main thread  
from the other thread.
An alertable wait (like SleepEx) plus QueueUserAPC should work, I presume,  
but I've never actually tried in Python.


--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list