Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.164.151] |
|
Сообщ.
#1
,
|
|
|
1. Имеется Win32 приложение EXE которое имеет основной поток GUI и дополнительный.
2. Взаимодействие с питоном происходит через Python27.dll 3. При запуске приложения в основном потоке делается: Py_SetProgramName("11111"); /* optional but recommended */ Py_Initialize(); 4. При разрушении приложения делается Py_Finalize(); 5. В дополнительном потоке загружается скрипт и производится его выполнение(бесконечный цикл скрипта) ThreadFunc { <<< Star WinAPI thread >>> ............ PyObject* PyFileObject = PyFile_FromString("Mytest.py", "r"); PyRun_SimpleFile(PyFile_AsFile(PyFileObject), "Mytest.py"); ............ <<< Exit WinAPI thread >>> } Mytest.py import time, re, random print ('test script') while True : i = 1 while i < 80 : i = i+1 for k in range (0, 10) : idx = (i+k) % 10 if k < 3 : print ('step 1') else : print ('step 2') time.sleep(5.0) Вопрос, как завершить выполнение Python скрипта чтобы PyRun_SimpleFile возвратила управление и был произведен выход из ThreadFunc ???? |
Сообщ.
#2
,
|
|
|
Сообщ.
#3
,
|
|
|
По ссылке ничего такого нету ответа на мой вопрос. Цитата Кстати у нас есть раздел по Python. Нашел, почему то он находиться в Web технологиях, хотя он как язык на общих основаниях так же близок как и к SEO |
Сообщ.
#4
,
|
|
|
Цитата korvin @ чтобы PyRun_SimpleFile возвратила управление необходимо, чтобы скрипт выполнился. А если в скрипте бесконечный цикл, то возврата не будет А зачем вам выход? Убейте поток |
Сообщ.
#5
,
|
|
|
Цитата А зачем вам выход? Убейте поток Выход это чтобы корректно завершить программу. Поток то я убью, только python.dll с большой вероятностью создает свой поток под выполнение скрипта, а он и так и останется висеть, при при выгрузке процесса я получу AV Пробовал вызывать функцию Py_Exit(0). Если вызываю так: PyGILState_STATE state = PyGILState_Ensure(); Py_Exit(0); PyGILState_Release(state); то весь процесс зависает. если вызываю так Py_Exit(0); ТО получаю AV в python.dll |