Войти

Показать полную графическую версию : Создание потока посредством Win API


Oldst
23-07-2009, 19:29
Всем привет! Пытаюсь использовать ф-цию "CreateThread" из Win API. Проблема в том что скрипт мой вылетает. Подскажите пожалуйста где у меня ошибка.
Вот мой код:
$do=DllOpen('kernel32.dll')
$thread_reg=DLLCallbackRegister ("_thread1", "ptr", "")
Func _thread1()
While 1
Beep(1000,500)
Sleep(500)
WEnd
EndFunc
$dk=DllCall($do, 'int', 'CreateThread', 'int', 0, 'int', 0,'ptr', DllCallbackGetPtr($thread_reg), 'int',0, 'int', 0, 'int',0)
GUICreate('',100,50)
$lb=GUICtrlCreateLabel (@SEC,20,20,50,10)
GUISetState()
For $i=1 To 10
GUICtrlSetData ($lb,@SEC)
Sleep(1000)
Next

Описание ф-ции "CreateThread" здесь (http://www.vsokovikov.narod.ru/New_MSDN_API/Process_thread/fn_createthread.htm)

Yashied
23-07-2009, 22:23
AutoIt не будет работать в разных патоках. Можешь не пытаться, стабильной работы не добьешься.

Oldst
23-07-2009, 22:28
Т. е. Autoit в принципе не может корректно работать с этой функцией? Хотя поток все-таки создается,
сам проверял...

amel27
24-07-2009, 02:19
Autoit в принципе не может корректно работать с этой функцией? »одного CreateThread() маловато будет, и DLLCallbackRegister() тут не помощник - он не сможет вернуть указатель на реальную UDF, т.к. AutoIT не является полноценным компилятором и, скорее всего, это какой-то враппер... ищите примеры на оффсайте:

Execute in a different thread. Multithreading again? (http://www.autoitscript.com/forum/index.php?showtopic=95510)

Yashied
24-07-2009, 02:21
Поток создать ты конечно можешь, это WinAPI, и не зависит от AutoIt. Но вот доступ к глобальным переменным организовать не получится. Ну, в принципе можно попытаться посидеть с ассемблером, но оно того не стоит. Проще создать отдельный процесс. Хотя ... ты можешь попробывать запустить какую-нибудь WinAPI-функцию (например MessageBox()) в отдельном потоке. Теоритически, это должно работать, хотя польза от этого ~0.




© OSzone.net 2001-2012