[San-Diego-pm] Wrangle module version?
Bob Kleemann
rkleeman at energoncube.net
Tue May 10 21:01:36 PDT 2011
Since I don't have a Windows box to test this on, I'm not sure, but
you could try something like
our $LOW_PRIORITY;
BEGIN {
require Win32::Process;
eval {
Win32::Process->import(qw[
BELOW_NORMAL_PRIORITY_CLASS
ABOVE_NORMAL_PRIORITY_CLASS
]);
$LOW_PRIORITY = BELOW_NORMAL_PRIORITY_CLASS;
}
|| eval {
Win32::Process->import(qw[ LOW ])
$LOW_PRIORITY = LOW;
};
}
Then proceed to use $LOW_PRIORITY where you would normally use
BELOW_NORMAL_PRIORITY_CLASS.
2011/5/10 Reuben Settergren <ruberad at gmail.com>:
> Hello Mongers,
>
> I have what seems like it should be a simple problem (and it probably is!),
> but I'm not finding the simple solution, so I'm hoping somebody can give me
> the right answer off the top of their head.
>
> So the group I work with shares a perl script to run multi-hour builds (of
> C++, on windows boxes, with visual studio 9). Usually we try to rebuild the
> whole shebang overnight, and then work on it all day. But sometimes we have
> to build during the day, and the computer can bog down.
>
> So yesterday I added this bitchin little tweak to allow the script to demote
> its own windows priority to "Below Normal", which in turn governs the
> priority of all the build tasks it spawns. Suddenly, it's a lot easier to
> get work done while the computer is building. Yay.
>
> But, I discovered today that not all of us developers have the same install
> of ActiveState (and it's not possible to mandate them to all upgrade to
> 5.10), and older versions of Win32::Process do not offer the symbols
> BELOW_NORMAL_PRIORITY_CLASS and ABOVE_NORMAL_PRIORITY_CLASS (presumably
> because win2K or pre-win2K did not have those priorities), so they cannot
>
> use Win32::Process qw[ BELOW_NORMAL_PRIORITY_CLASS
> ABOVE_NORMAL_PRIORITY_CLASS ];
>
> and the perl script borks.
>
> What I could do is modify the script so that the only possible
> priority-switching option is to change to LOW.
>
> What I'd rather do is allow every user access to every priority that their
> Win32::Process makes available to them. Is there a perl statement that will
> tell me whether Win32::Process is able to export the symbols I want, without
> actually trying to import them and killing the script?
>
> For reference, the trivial script below works for me, but not for the
> outdated. If this could be made to detect whether the symbols are available,
> and switch to low/high if they are not, that would solve my problem.
>
>
>
> use Win32::Process;
> use Win32::Process qw[ BELOW_NORMAL_PRIORITY_CLASS
> ABOVE_NORMAL_PRIORITY_CLASS ];
>
> my $pid = Win32::Process::GetCurrentProcessID();
> print "PID is $pid\n";
>
> $i = 100;
> $dt = 5;
> while ($i) {
> print "Sleeping for $dt seconds; $i\n";
> sleep $dt;
> $i--;
>
> my $proc;
> if (Win32::Process::Open($proc, $pid, 0)) {
> my $class;
> $proc->GetPriorityClass($class);
> print "Priority class is $class\n";
> if ($i%2) {
> print "Changing class to BELOW NORMAL\n";
> $proc->SetPriorityClass(BELOW_NORMAL_PRIORITY_CLASS);
> } else {
> print "Changing class to ABOVE NORMAL\n";
> $proc->SetPriorityClass(ABOVE_NORMAL_PRIORITY_CLASS);
> }
>
> } else {
> print "Can't find myself as PID=$pid\n";
> }
>
> }
>
>
>
>
>
>
> _______________________________________________
> San-Diego-pm mailing list
> San-Diego-pm at pm.org
> http://mail.pm.org/mailman/listinfo/san-diego-pm
>
More information about the San-Diego-pm
mailing list