In a message dated 4/25/2006 9:09:46 PM Eastern Daylight Time, [EMAIL PROTECTED] writes:


alarm() is emulated on Windows.  It works at the Perl level, but it doesn’t interrupt while you are executing XS code, and it will also not terminate blocking system calls.

There is no way to abort an OLE call short of terminating the process as far as I can tell. The only exception would be objects that provide an event mechanism and periodically poll the caller to see if they should abort the long running operation or not.


A basic design decision in NT4 was to explicitly prevent user code (RING3) from terminating system calls. Only device drivers, and privileged system code, can terminate a process (or set a timeout that works within a blocking call).

Win32::SerialPort implemented timeouts using the system calls it essentially inherited from the serial device driver (which runs in RING0 in order to process serial interrupts). Even there it was necessary to "be ready" for the timeout - there was not a convenient way to redirect to a "timeout handler". I think network drivers permit something similar. But most of Win32 does not. Sorry.

-bill

[somewhere in the porter archives, about 1999, there is a long post with all the gory details]
_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to