Интерпретатор Lua низкого уровня

Это то, что вы хотите?

import ctypes

def get_display_name():
    GetUserNameEx = ctypes.windll.secur32.GetUserNameExW
    NameDisplay = 3

    size = ctypes.pointer(ctypes.c_ulong(0))
    GetUserNameEx(NameDisplay, None, size)

    nameBuffer = ctypes.create_unicode_buffer(size.contents.value)
    GetUserNameEx(NameDisplay, nameBuffer, size)
    return nameBuffer.value

print(get_display_name())

Второй сценарий

user_info = win32net.NetUserGetInfo(win32net.NetGetAnyDCName(),   win32api.GetUserName(), 2)
full_name = user_info["full_name"]
print(full_name)
7
задан andygeers 14 March 2009 в 20:14
поделиться

4 ответа

Возможно, обходя вопрос, но Вы могли использовать сопрограммы Lua, а не пользовательский материал C для ожидания, пока некоторое событие не имеет место.

Например, одна сопрограмма могла назвать waitForEvent () функцией. Там, можно переключиться на другой Коро, пока то событие не имеет место, затем возобновите первый. Смотрите на lua документы Коро для больше об этом.

14
ответ дан 6 December 2019 в 06:38
поделиться
2
ответ дан 6 December 2019 в 06:38
поделиться

Предложение Jder для использования сопрограмм будет работать очень хорошо, если можно записать тем, которые долго ожидают C стандартные программы с помощью кооператива Lua, распараллеливающего (явный урожай) функция. Вы будете все еще использовать lua_pcall () для ввода Lua, но точка входа будет функцией менеджера по сопрограмме.

Это только работает хотя, если стандартные программы C ничего не делают, в то время как они ожидают. Если они длительны, потому что они вычисляют что-то, например, то необходимо выполнить несколько потоков ОС. Lua ориентирован на многопотоковое исполнение - просто создают несколько потоков и выполняют lua_open () в каждом потоке.

Из http://www.lua.org/pil/24.1.html

Библиотека Lua не определяет глобальных переменных вообще. Это сохраняет все свое состояние в динамической структуре lua_State, и указатель на эту структуру передается как аргумент всем функциям в Lua. Эта реализация делает Lua повторно используемым и готовым использоваться в многопоточном коде.

Можно также объединить два подхода. Если у Вас есть обертка функция Lua для запуска потока ОС, можно уступить после запуска потока. Менеджер по сопрограмме будет отслеживать потоки и продолжать сопрограмму, когда поток, который она запустила, закончился. Это позволяет Вам использовать единственный интерпретатор Lua с несколькими рабочими потоками, выполняющими чистый код C.

6
ответ дан 6 December 2019 в 06:38
поделиться

Если Вы идете поточной обработкой ОС путь, взгляните на Маршруты Lua. Я видел бы его идеальное решение того, чего Вы пытаетесь достигнуть (=, бросают один дополнительный модуль в соединение, и Вы будете ясно давать понять, понятный и простой код с многопоточностью, беспрепятственно встроенной).

Скажите нам, как Ваша проблема была решена.:)

5
ответ дан 6 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: