Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Is GUITest SetForegroundWindow/Sendkey thread safe?

by BrowserUk (Pope)
on Mar 26, 2014 at 16:54 UTC ( #1079840=note: print w/ replies, xml ) Need Help??


in reply to Is GUITest SetForegroundWindow/Sendkey thread safe?

  • First thing. This has nothing whatever to do with "thread safety".
  • Imagine that there is another copy of your program also running on the machine but looking for a different window.

    If your program calls SetForegroundWindow(), and then reaches the end of its timeslice and gets preempted; then the other program might call SetForegroundWindow before your program gets around to calling SendKeys().

    With just two programs with two actions (SFW & SK) each, there are six possibilities for the ordering of those 4 actions:

    A A A B B B A B B A A B B A B B A A B B A A B A

    Only two will produce the desired result for both programs.

  • If so, what could one way be of fixing this,

    The only sure way would be to wrap the two actions in a Critical Section.

    This isn't (cannot easily be) available to Perl code.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.


Comment on Re: Is GUITest SetForegroundWindow/Sendkey thread safe?
Download Code
Re^2: Is GUITest SetForegroundWindow/Sendkey thread safe?
by MPQC (Initiate) on Mar 26, 2014 at 17:40 UTC

    Sad to hear that's the case, but thanks for the information nonetheless. I'll try to come up with a different solution which doesn't require me finding a unique name & sending a key to it. :)

      Sorta sounds like you have control over both the driven and driving sides of the system. How about you tell us a little more about what you want to achieve and we may be able to offer an alternative way to solve the problem (about three different ways spring to mind depending on what you need to do).

      <c>
      Perl is the programming world's equivalent of English
      Sad to hear that's the case

      You could greatly increase your chances of not getting interrupted at an inopportune moment by (temporarily) raising the priority of your process.

      Of course, if the other application takes the same approach, your back to square one.

      I'll try to come up with a different solution which doesn't require me finding a unique name & sending a key to it. :)

      If you tell us what application your driving, someone might have another solution.


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1079840]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2014-07-26 05:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (175 votes), past polls