xref: /aosp_15_r20/external/OpenCL-CTS/test_common/harness/genericThread.cpp (revision 6467f958c7de8070b317fc65bcb0f6472e388d82)
1*6467f958SSadaf Ebrahimi //
2*6467f958SSadaf Ebrahimi // Copyright (c) 2017 The Khronos Group Inc.
3*6467f958SSadaf Ebrahimi //
4*6467f958SSadaf Ebrahimi // Licensed under the Apache License, Version 2.0 (the "License");
5*6467f958SSadaf Ebrahimi // you may not use this file except in compliance with the License.
6*6467f958SSadaf Ebrahimi // You may obtain a copy of the License at
7*6467f958SSadaf Ebrahimi //
8*6467f958SSadaf Ebrahimi //    http://www.apache.org/licenses/LICENSE-2.0
9*6467f958SSadaf Ebrahimi //
10*6467f958SSadaf Ebrahimi // Unless required by applicable law or agreed to in writing, software
11*6467f958SSadaf Ebrahimi // distributed under the License is distributed on an "AS IS" BASIS,
12*6467f958SSadaf Ebrahimi // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6467f958SSadaf Ebrahimi // See the License for the specific language governing permissions and
14*6467f958SSadaf Ebrahimi // limitations under the License.
15*6467f958SSadaf Ebrahimi //
16*6467f958SSadaf Ebrahimi #include "genericThread.h"
17*6467f958SSadaf Ebrahimi 
18*6467f958SSadaf Ebrahimi #if defined(_WIN32)
19*6467f958SSadaf Ebrahimi #include <windows.h>
20*6467f958SSadaf Ebrahimi #else // !_WIN32
21*6467f958SSadaf Ebrahimi #include <pthread.h>
22*6467f958SSadaf Ebrahimi #endif
23*6467f958SSadaf Ebrahimi 
IStaticReflector(void * data)24*6467f958SSadaf Ebrahimi void *genericThread::IStaticReflector(void *data)
25*6467f958SSadaf Ebrahimi {
26*6467f958SSadaf Ebrahimi     genericThread *t = (genericThread *)data;
27*6467f958SSadaf Ebrahimi     return t->IRun();
28*6467f958SSadaf Ebrahimi }
29*6467f958SSadaf Ebrahimi 
Start(void)30*6467f958SSadaf Ebrahimi bool genericThread::Start(void)
31*6467f958SSadaf Ebrahimi {
32*6467f958SSadaf Ebrahimi #if defined(_WIN32)
33*6467f958SSadaf Ebrahimi     mHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)IStaticReflector,
34*6467f958SSadaf Ebrahimi                            this, 0, NULL);
35*6467f958SSadaf Ebrahimi     return (mHandle != NULL);
36*6467f958SSadaf Ebrahimi #else // !_WIN32
37*6467f958SSadaf Ebrahimi     int error = pthread_create((pthread_t *)&mHandle, NULL, IStaticReflector,
38*6467f958SSadaf Ebrahimi                                (void *)this);
39*6467f958SSadaf Ebrahimi     return (error == 0);
40*6467f958SSadaf Ebrahimi #endif // !_WIN32
41*6467f958SSadaf Ebrahimi }
42*6467f958SSadaf Ebrahimi 
Join(void)43*6467f958SSadaf Ebrahimi void *genericThread::Join(void)
44*6467f958SSadaf Ebrahimi {
45*6467f958SSadaf Ebrahimi #if defined(_WIN32)
46*6467f958SSadaf Ebrahimi     WaitForSingleObject((HANDLE)mHandle, INFINITE);
47*6467f958SSadaf Ebrahimi     return NULL;
48*6467f958SSadaf Ebrahimi #else // !_WIN32
49*6467f958SSadaf Ebrahimi     void *retVal;
50*6467f958SSadaf Ebrahimi     int error = pthread_join((pthread_t)mHandle, &retVal);
51*6467f958SSadaf Ebrahimi     if (error != 0) retVal = NULL;
52*6467f958SSadaf Ebrahimi     return retVal;
53*6467f958SSadaf Ebrahimi #endif // !_WIN32
54*6467f958SSadaf Ebrahimi }
55