Re: [PATCH] MSVC: port pthread code to native Windows threads
- From
Paolo Bonzini <bonzini@gnu.org>
- Date
- Nov 4, 2009, 11:14 UTC
- Message-ID
- <hcrnm0$dh6$1@ger.gmane.org>
- In-Reply-To
- <40aa078e0911040250k55fa1920g6eee5657c6e35345@mail.gmail.com>
On 11/04/2009 11:50 AM, Erik Faye-Lund wrote:
Show 32 quoted lines
> On Wed, Nov 4, 2009 at 11:37 AM, Andrzej K. Haczewski > <ahaczewski@gmail.com> wrote: >> +/* >> + * Properly defines thread routine for Windows and POSIX >> + */ >> +#ifndef NO_PTHREADS >> +# ifndef _WIN32 >> +# define THREAD_FUNC(f, a) void *f(void *a) >> +# define THREAD_RETURN(x) return (x) >> +# else >> +# define THREAD_FUNC(f, a) DWORD __stdcall f(LPVOID a) >> +# define THREAD_RETURN(x) return (DWORD)(x); >> +# endif >> +#endif >> + > > Seeing how THREAD_RETURN is only called with NULL-parameter, perhaps > it would be better to do this? > > +/* > + * Properly defines thread routine for Windows and POSIX > + */ > +#ifndef NO_PTHREADS > +# ifndef _WIN32 > +# define THREAD_FUNC(f, a) void *f(void *a) > +# define THREAD_RETURN() return NULL; > +# else > +# define THREAD_FUNC(f, a) DWORD __stdcall f(LPVOID a) > +# define THREAD_RETURN() return 0; > +# endif > +#endif >> +
Even better, "return 0" is good under either platform (0 converts to void *), and LPVOID is the same thing as void*, so you can just do
#ifndef _WIN32 # define THREAD_RET_TYPE DWORD __stdcall #else # define THREAD_RET_TYPE void * #endif
Paolo