summaryrefslogtreecommitdiff
path: root/win32/nice.c
diff options
context:
space:
mode:
Diffstat (limited to 'win32/nice.c')
-rw-r--r--win32/nice.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/win32/nice.c b/win32/nice.c
new file mode 100644
index 0000000000..db26cc1aa6
--- /dev/null
+++ b/win32/nice.c
@@ -0,0 +1,83 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 7 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2016 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Kalle Sommer Nielsen <kalle@php.net> |
+ +----------------------------------------------------------------------+
+ */
+
+#include <php.h>
+#include "nice.h"
+
+/*
+ * Basic Windows implementation for the nice() function.
+ *
+ * This implementation uses SetPriorityClass() as a backend for defining
+ * a process priority.
+ *
+ * The following values of inc, defines the value sent to SetPriorityClass():
+ *
+ * +-----------------------+-----------------------------+
+ * | Expression | Priority type |
+ * +-----------------------+-----------------------------+
+ * | priority < -14 | REALTIME_PRIORITY_CLASS |
+ * +-----------------------+-----------------------------+
+ * | priority < -9 | HIGH_PRIORITY_CLASS |
+ * +-----------------------+-----------------------------+
+ * | priority < -4 | ABOVE_NORMAL_PRIORITY_CLASS |
+ * +-----------------------+-----------------------------+
+ * | priority > 4 | BELOW_NORMAL_PRIORITY_CLASS |
+ * +-----------------------+-----------------------------+
+ * | priority > 9 | IDLE_PRIORITY_CLASS |
+ * +-----------------------+-----------------------------+
+ *
+ * If a value is between -4 and 4 (inclusive), then the priority will be set
+ * to NORMAL_PRIORITY_CLASS.
+ *
+ * These values tries to mimic that of the UNIX version of nice().
+ *
+ * This is applied to the main process, not per thread, although this could
+ * be implemented using SetThreadPriority() at one point.
+ */
+
+PHPAPI int nice(zend_long p)
+{
+ DWORD dwFlag = NORMAL_PRIORITY_CLASS;
+
+ if (p < -14) {
+ dwFlag = REALTIME_PRIORITY_CLASS;
+ } else if (p < -9) {
+ dwFlag = HIGH_PRIORITY_CLASS;
+ } else if (p < -4) {
+ dwFlag = ABOVE_NORMAL_PRIORITY_CLASS;
+ } else if (p > 9) {
+ dwFlag = IDLE_PRIORITY_CLASS;
+ } else if (p > 4) {
+ dwFlag = BELOW_NORMAL_PRIORITY_CLASS;
+ }
+
+ if (!SetPriorityClass(GetCurrentProcess(), dwFlag)) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */