|  | /*
   Copyright (C) 2004 Paul Davis
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published by
   the Free Software Foundation; either version 2.1 of the License, or
   (at your option) any later version.
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU Lesser General Public License for more details.
   You should have received a copy of the GNU Lesser General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
   $Id: thread.h,v 1.1.2.2 2006/06/20 14:44:00 letz Exp $
*/
#ifndef __jack_thread_h__
#define __jack_thread_h__
#ifdef __cplusplus
extern "C"
{
#endif
#ifdef WIN32
	#include <windows.h>
    typedef HANDLE pthread_t;
#else
	#include <pthread.h>
#endif
    /** @file thread.h
     *
     * Library functions to standardize thread creation for JACK and its
     * clients.  These interfaces hide some system variations in the
     * handling of realtime scheduling and associated privileges.
     */
    /**
     * Attempt to enable realtime scheduling for a thread.  On some
     * systems that may require special privileges.
     *
     * @param thread POSIX thread ID.
     * @param priority requested thread priority.
     *
     * @returns 0, if successful; EPERM, if the calling process lacks
     * required realtime privileges; otherwise some other error number.
     */
    int jack_acquire_real_time_scheduling (pthread_t thread, int priority);
    /**
     * Create a thread for JACK or one of its clients.  The thread is
     * created executing @a start_routine with @a arg as its sole
     * argument.
     *
     * @param client the JACK client for whom the thread is being created. May be
     * NULL if the client is being created within the JACK server.
     * @param thread place to return POSIX thread ID.
     * @param priority thread priority, if realtime.
     * @param realtime true for the thread to use realtime scheduling.  On
     * some systems that may require special privileges.
     * @param start_routine function the thread calls when it starts.
     * @param arg parameter passed to the @a start_routine.
     *
     * @returns 0, if successful; otherwise some error number.
     */
    int jack_client_create_thread (jack_client_t* client,
                                   pthread_t *thread,
                                   int priority,
                                   int realtime, 	/* boolean */
                                   void *(*start_routine)(void*),
                                   void *arg);
    /**
     * Drop realtime scheduling for a thread.
     *
     * @param thread POSIX thread ID.
     *
     * @returns 0, if successful; otherwise an error number.
     */
    int jack_drop_real_time_scheduling (pthread_t thread);
#ifdef __cplusplus
}
#endif
#endif /* __jack_thread_h__ */
 |