Blame view

FFNvDecoder/common/src/multithreading.cpp 1.66 KB
a359bb4f   Hu Chunming   调通可正常运行 -- 初版
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
  /**
   * Copyright 1993-2013 NVIDIA Corporation.  All rights reserved.
   *
   * Please refer to the NVIDIA end user license agreement (EULA) associated
   * with this source code for terms and conditions that govern your use of
   * this software. Any use, reproduction, disclosure, or distribution of
   * this software and related documentation outside the terms of the EULA
   * is strictly prohibited.
   *
   */
  
  #include <multithreading.h>
  
  #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
  //Create thread
  CUTThread cutStartThread(CUT_THREADROUTINE func, void *data)
  {
      return CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)func, data, 0, NULL);
  }
  
  //Wait for thread to finish
  void cutEndThread(CUTThread thread)
  {
      WaitForSingleObject(thread, INFINITE);
      CloseHandle(thread);
  }
  
  //Destroy thread
  void cutDestroyThread(CUTThread thread)
  {
      TerminateThread(thread, 0);
      CloseHandle(thread);
  }
  
  //Wait for multiple threads
  void cutWaitForThreads(const CUTThread *threads, int num)
  {
      WaitForMultipleObjects(num, threads, true, INFINITE);
  
      for (int i = 0; i < num; i++)
      {
          CloseHandle(threads[i]);
      }
  }
  
  #else
  //Create thread
  CUTThread cutStartThread(CUT_THREADROUTINE func, void *data)
  {
      pthread_t thread;
      pthread_create(&thread, NULL, func, data);
      return thread;
  }
  
  //Wait for thread to finish
  void cutEndThread(CUTThread thread)
  {
      pthread_join(thread, NULL);
  }
  
  //Destroy thread
  void cutDestroyThread(CUTThread thread)
  {
      pthread_cancel(thread);
  }
  
  //Wait for multiple threads
  void cutWaitForThreads(const CUTThread *threads, int num)
  {
      for (int i = 0; i < num; i++)
      {
          cutEndThread(threads[i]);
      }
  }
  
  #endif