os0proc.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. The interface to the operating system
  3. process control primitives
  4. (c) 1995 Innobase Oy
  5. Created 9/30/1995 Heikki Tuuri
  6. *******************************************************/
  7. #include "os0proc.h"
  8. #ifdef UNIV_NONINL
  9. #include "os0proc.ic"
  10. #endif
  11. #ifdef __WIN__
  12. #include <windows.h>
  13. #endif
  14. #include "ut0mem.h"
  15. /********************************************************************
  16. Allocates non-cacheable memory. */
  17. void*
  18. os_mem_alloc_nocache(
  19. /*=================*/
  20. /* out: allocated memory */
  21. ulint n) /* in: number of bytes */
  22. {
  23. #ifdef __WIN__
  24. void* ptr;
  25.        ptr = VirtualAlloc(NULL, n, MEM_COMMIT,
  26. PAGE_READWRITE | PAGE_NOCACHE);
  27. ut_a(ptr);
  28. return(ptr);
  29. #else
  30. return(ut_malloc(n));
  31. #endif
  32. }
  33. #ifdef notdefined
  34. /********************************************************************
  35. Creates a new process. */
  36. ibool
  37. os_process_create(
  38. /*==============*/
  39. char* name, /* in: name of the executable to start
  40. or its full path name */
  41. char* cmd, /* in: command line for the starting
  42. process, or NULL if no command line
  43. specified */
  44. os_process_t* proc, /* out: handle to the process */
  45. os_process_id_t* id) /* out: process id */
  46. {
  47. BOOL ret;
  48. PROCESS_INFORMATION pinfo;
  49. STARTUPINFO sinfo;
  50. /* The following assignments are default for the startupinfo
  51. structure */
  52. sinfo.cb = sizeof(STARTUPINFO);
  53. sinfo.lpReserved = NULL;
  54. sinfo.lpDesktop = NULL;
  55. sinfo.cbReserved2 = 0;
  56. sinfo.lpReserved = NULL;
  57. ret = CreateProcess(name,
  58.       cmd,
  59.       NULL, /* No security attributes */
  60.       NULL, /* No thread security attrs */
  61.       FALSE, /* Do not inherit handles */
  62.       0, /* No creation flags */
  63.       NULL, /* No environment */
  64.       NULL, /* Same current directory */
  65.       &sinfo,
  66.       &pinfo);
  67. *proc = pinfo.hProcess;
  68. *id   = pinfo.dwProcessId;
  69. return(ret);
  70. }
  71. /**************************************************************************
  72. Exits a process. */
  73. void
  74. os_process_exit(
  75. /*============*/
  76. ulint code) /* in: exit code */
  77. {
  78. ExitProcess((UINT)code);
  79. }
  80. /**************************************************************************
  81. Gets a process exit code. */
  82. ibool
  83. os_process_get_exit_code(
  84. /*=====================*/
  85. /* out: TRUE if succeed, FALSE if fail */
  86. os_process_t proc, /* in: handle to the process */
  87. ulint* code) /* out: exit code */
  88. {
  89. DWORD ex_code;
  90. BOOL ret;
  91. ret = GetExitCodeProcess(proc, &ex_code);
  92. *code = (ulint)ex_code;
  93. return(ret);
  94. }
  95. #endif /* notdedfined */
  96. /********************************************************************
  97. Sets the priority boost for threads released from waiting within the current
  98. process. */
  99. void
  100. os_process_set_priority_boost(
  101. /*==========================*/
  102. ibool do_boost) /* in: TRUE if priority boost should be done,
  103. FALSE if not */
  104. {
  105. #ifdef __WIN__
  106. ibool no_boost;
  107. if (do_boost) {
  108. no_boost = FALSE;
  109. } else {
  110. no_boost = TRUE;
  111. }
  112. ut_a(TRUE == 1);
  113. /* Does not do anything currently!
  114. SetProcessPriorityBoost(GetCurrentProcess(), no_boost);
  115. */
  116. printf(
  117.         "Warning: process priority boost setting currently not functional!n"
  118. );
  119. #else
  120. UT_NOT_USED(do_boost);
  121. #endif
  122. }