Вы можете создать для этого функцию:
/**
* Split a string by string (Similar to the php function explode())
*
* @param VARCHAR(12) delim The boundary string (delimiter).
* @param VARCHAR(255) str The input string.
* @param INT pos The index of the string to return
* @return VARCHAR(255) The (pos)th substring
* @return VARCHAR(255) Returns the [pos]th string created by splitting the str parameter on boundaries formed by the delimiter.
* @{@example
* SELECT SPLIT_STRING('|', 'one|two|three|four', 1);
* This query
* }
*/
DROP FUNCTION IF EXISTS SPLIT_STRING;
CREATE FUNCTION SPLIT_STRING(delim VARCHAR(12), str VARCHAR(255), pos INT)
RETURNS VARCHAR(255) DETERMINISTIC
RETURN
REPLACE(
SUBSTRING(
SUBSTRING_INDEX(str, delim, pos),
LENGTH(SUBSTRING_INDEX(str, delim, pos-1)) + 1
),
delim, ''
);
Преобразование магического псевдокода для его использования: у вас есть:
SELECT e.`studentId`, SPLIT_STRING(',', c.`courseNames`, e.`courseId`)
FROM...
Вы можете передать STARTUPINFOEX
в CreateProcess()
(включить флаг EXTENDED_STARTUPINFO_PRESENT
), где STARTUPINFOEX
содержит указатель на структуру PROC_THREAD_ATTRIBUTE_LIST
, которая в списке есть элемент PROC_THREAD_ATTRIBUTE_PREFERRED_NODE
:
Параметр lpValue является указателем на номер узла предпочтительного узла NUMA для нового процесса.
blockquote>См.
InitializeProcThreadAttributeList()
иUpdateProcThreadAttribute()
для получения дополнительной информации о построении списка атрибутов.Раймонд Чен обсуждает
PROC_THREAD_ATTRIBUTE_LIST
в своем блоге:Программно контролирует, какие дескрипторы наследуются новыми процессами в Win32
Еще один способ создания процесс с атрибутами, может быть, хуже, может быть лучше