summaryrefslogtreecommitdiff
path: root/trunk/ACE/bin/PerlACE/Process.pm
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/ACE/bin/PerlACE/Process.pm')
-rw-r--r--trunk/ACE/bin/PerlACE/Process.pm65
1 files changed, 65 insertions, 0 deletions
diff --git a/trunk/ACE/bin/PerlACE/Process.pm b/trunk/ACE/bin/PerlACE/Process.pm
new file mode 100644
index 00000000000..130df8166c5
--- /dev/null
+++ b/trunk/ACE/bin/PerlACE/Process.pm
@@ -0,0 +1,65 @@
+# $Id$
+
+package PerlACE::Process;
+
+use strict;
+use English;
+use POSIX qw(:time_h);
+
+$PerlACE::Process::ExeSubDir = './';
+
+sub delay_factor {
+ my($lps) = 128;
+ my($factor) = 1;
+
+ ## Keep increasing the loops per second until the amount of time
+ ## exceeds the number of clocks per second. The original code
+ ## did not multiply $ticks by 8 but, for faster machines, it doesn't
+ ## seem to return false values. The multiplication is done to minimize
+ ## the amount of time it takes to determine the correct factor.
+ while(($lps <<= 1)) {
+ my($ticks) = clock();
+ for(my $i = $lps; $i >= 0; $i--) {
+ }
+ $ticks = clock() - $ticks;
+ if ($ticks * 8 >= CLOCKS_PER_SEC) {
+ $factor = 500000 / (($lps / $ticks) * CLOCKS_PER_SEC);
+ last;
+ }
+ }
+
+ return $factor;
+}
+
+### Check for -ExeSubDir commands, store the last one
+my @new_argv = ();
+
+for(my $i = 0; $i <= $#ARGV; ++$i) {
+ if ($ARGV[$i] eq '-ExeSubDir') {
+ if (defined $ARGV[$i + 1]) {
+ $PerlACE::Process::ExeSubDir = $ARGV[++$i].'/';
+ }
+ else {
+ print STDERR "You must pass a directory with ExeSubDir\n";
+ exit(1);
+ }
+ }
+ else {
+ push @new_argv, $ARGV[$i];
+ }
+}
+@ARGV = @new_argv;
+
+$PerlACE::Process::WAIT_DELAY_FACTOR = $ENV{"ACE_RUNTEST_DELAY"};
+
+if ($OSNAME eq "MSWin32") {
+ require PerlACE::Process_Win32;
+}
+elsif ($OSNAME eq "VMS") {
+ require PerlACE::Process_VMS;
+}
+else {
+ require PerlACE::Process_Unix;
+}
+
+1;