Mercurial > sdl-ios-xcode
annotate src/thread/pth/SDL_systhread.c @ 1525:23a347cfbed8
Fixed bug #38
I'm using SDL 1.2.9 with Visual C++ 7.0 on Windows 2000.
Here's the setup: my game starts in a window, with
SDL_WM_GrabInput(SDL_GRAB_ON) to constrain the cursor to the game window. The
mouse cursor is outside of the window when the game launches, and when the
window appears the cursor is grabbed and placed at the top left corner of the
inside of the game window. At this point, if I click the mouse without moving
it, the SDL_MOUSEBUTTONDOWN event's mouse coordinates are (65535,65535).
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 14 Mar 2006 06:00:30 +0000 |
parents | d910939febfa |
children | 14717b52abc0 |
rev | line source |
---|---|
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
13 Lesser General Public License for more details. |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
185
diff
changeset
|
20 slouken@libsdl.org |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
22 #include "SDL_config.h" |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
329
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
24 /* |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
25 * GNU pth threads |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
26 * |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
27 * Patrice Mandin |
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
28 */ |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 #include "SDL_thread.h" |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
31 #include "../SDL_systhread.h" |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
33 #include <pth.h> |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 #include <signal.h> |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 /* List of signals to mask in the subthreads */ |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 static int sig_list[] = { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGCHLD, SIGWINCH, |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 SIGVTALRM, SIGPROF, 0 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 }; |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 static void *RunThread(void *data) |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 SDL_RunThread(data); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 pth_exit((void*)0); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 return((void *)0); /* Prevent compiler warning */ |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 int SDL_SYS_CreateThread(SDL_Thread *thread, void *args) |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 pth_attr_t type; |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 |
329
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
53 /* Create a new attribute */ |
321
af42e7c4c860
Fixes for GNU pthreads from Patrice
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
54 type = pth_attr_new(); |
329
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
55 if ( type == NULL ) { |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 SDL_SetError("Couldn't initialize pth attributes"); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 return(-1); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 } |
321
af42e7c4c860
Fixes for GNU pthreads from Patrice
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
59 pth_attr_set(type, PTH_ATTR_JOINABLE, TRUE); |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 /* Create the thread and go! */ |
397 | 62 thread->handle = pth_spawn(type, RunThread, args); |
63 if ( thread->handle == NULL ) { | |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
64 SDL_SetError("Not enough resources to create thread"); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 return(-1); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
67 return(0); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 void SDL_SYS_SetupThread(void) |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 int i; |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 sigset_t mask; |
329
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
74 int oldstate; |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 /* Mask asynchronous signals for this thread */ |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 sigemptyset(&mask); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 for ( i=0; sig_list[i]; ++i ) { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
79 sigaddset(&mask, sig_list[i]); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
81 pth_sigmask(SIG_BLOCK, &mask, 0); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
82 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 /* Allow ourselves to be asynchronously cancelled */ |
329
1d74ddc90cb2
Patrice's fixes for GNU Pthread support
Sam Lantinga <slouken@libsdl.org>
parents:
321
diff
changeset
|
84 pth_cancel_state(PTH_CANCEL_ASYNCHRONOUS, &oldstate); |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 /* WARNING: This may not work for systems with 64-bit pid_t */ |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 Uint32 SDL_ThreadID(void) |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 return((Uint32)pth_self()); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
92 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
93 void SDL_SYS_WaitThread(SDL_Thread *thread) |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 { |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
95 pth_join(thread->handle, NULL); |
185
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
96 } |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 void SDL_SYS_KillThread(SDL_Thread *thread) |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
99 { |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
100 pth_cancel(thread->handle); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
101 pth_join(thread->handle, NULL); |
34d316d5e744
Added support for the GNU Pth thread lib (thanks Mandin!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
102 } |