AndroidThreads.h revision f91bb05132dccbb61a69351752d9ae47cc31f30d
1/* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef _LIBS_UTILS_ANDROID_THREADS_H 18#define _LIBS_UTILS_ANDROID_THREADS_H 19 20#include <stdint.h> 21#include <sys/types.h> 22 23#if defined(HAVE_PTHREADS) 24# include <pthread.h> 25#endif 26 27#include <utils/ThreadDefs.h> 28 29// --------------------------------------------------------------------------- 30// C API 31 32#ifdef __cplusplus 33extern "C" { 34#endif 35 36// Create and run a new thread. 37extern int androidCreateThread(android_thread_func_t, void *); 38 39// Create thread with lots of parameters 40extern int androidCreateThreadEtc(android_thread_func_t entryFunction, 41 void *userData, 42 const char* threadName, 43 int32_t threadPriority, 44 size_t threadStackSize, 45 android_thread_id_t *threadId); 46 47// Get some sort of unique identifier for the current thread. 48extern android_thread_id_t androidGetThreadId(); 49 50// Low-level thread creation -- never creates threads that can 51// interact with the Java VM. 52extern int androidCreateRawThreadEtc(android_thread_func_t entryFunction, 53 void *userData, 54 const char* threadName, 55 int32_t threadPriority, 56 size_t threadStackSize, 57 android_thread_id_t *threadId); 58 59// Used by the Java Runtime to control how threads are created, so that 60// they can be proper and lovely Java threads. 61typedef int (*android_create_thread_fn)(android_thread_func_t entryFunction, 62 void *userData, 63 const char* threadName, 64 int32_t threadPriority, 65 size_t threadStackSize, 66 android_thread_id_t *threadId); 67 68extern void androidSetCreateThreadFunc(android_create_thread_fn func); 69 70// ------------------------------------------------------------------ 71// Extra functions working with raw pids. 72 73// Get pid for the current thread. 74extern pid_t androidGetTid(); 75 76// Change the scheduling group of a particular thread. The group 77// should be one of the ANDROID_TGROUP constants. Returns BAD_VALUE if 78// grp is out of range, else another non-zero value with errno set if 79// the operation failed. Thread ID zero means current thread. 80extern int androidSetThreadSchedulingGroup(pid_t tid, int grp); 81 82// Change the priority AND scheduling group of a particular thread. The priority 83// should be one of the ANDROID_PRIORITY constants. Returns INVALID_OPERATION 84// if the priority set failed, else another value if just the group set failed; 85// in either case errno is set. Thread ID zero means current thread. 86extern int androidSetThreadPriority(pid_t tid, int prio); 87 88// Get the current priority of a particular thread. Returns one of the 89// ANDROID_PRIORITY constants or a negative result in case of error. 90extern int androidGetThreadPriority(pid_t tid); 91 92// Get the current scheduling group of a particular thread. Normally returns 93// one of the ANDROID_TGROUP constants other than ANDROID_TGROUP_DEFAULT. 94// Returns ANDROID_TGROUP_DEFAULT if no pthread support (e.g. on host) or if 95// scheduling groups are disabled. Returns INVALID_OPERATION if unexpected error. 96// Thread ID zero means current thread. 97extern int androidGetThreadSchedulingGroup(pid_t tid); 98 99#ifdef __cplusplus 100} // extern "C" 101#endif 102 103// ---------------------------------------------------------------------------- 104// C++ API 105#ifdef __cplusplus 106namespace android { 107// ---------------------------------------------------------------------------- 108 109// Create and run a new thread. 110inline bool createThread(thread_func_t f, void *a) { 111 return androidCreateThread(f, a) ? true : false; 112} 113 114// Create thread with lots of parameters 115inline bool createThreadEtc(thread_func_t entryFunction, 116 void *userData, 117 const char* threadName = "android:unnamed_thread", 118 int32_t threadPriority = PRIORITY_DEFAULT, 119 size_t threadStackSize = 0, 120 thread_id_t *threadId = 0) 121{ 122 return androidCreateThreadEtc(entryFunction, userData, threadName, 123 threadPriority, threadStackSize, threadId) ? true : false; 124} 125 126// Get some sort of unique identifier for the current thread. 127inline thread_id_t getThreadId() { 128 return androidGetThreadId(); 129} 130 131// ---------------------------------------------------------------------------- 132}; // namespace android 133#endif // __cplusplus 134// ---------------------------------------------------------------------------- 135 136#endif // _LIBS_UTILS_ANDROID_THREADS_H 137