Код: Выделить всё
CreateThread(long,long,long,long,long,*long),raw,unsigned,pascal,name('createthread')
И как теперь ссылку на ф-цию дать ?
LPTHREAD_START_ROUTINE lpStartAddress
как должен работать этот параметр ?
Модератор: Дед Пахом
Код: Выделить всё
CreateThread(long,long,long,long,long,*long),raw,unsigned,pascal,name('createthread')
Код: Выделить всё
if WatchDir.Init(thread(),loc:DirName)
message('Can not watch')
end
CreateThread также описать с LONG и передавать ThreadProc как ADDRESS(ThreadProc)
в ThreadProc будет передаваться адрес lpParameter, получать данные из него по memcpy
Код: Выделить всё
Test PROGRAM
MAP
MODULE('Windows')
CloseHandle(UnSigned Handle), BOOL, Raw,Pascal,DLL(TRUE), Proc
CreateThread(ULong PtrSecurAttr=0, ULong StackSizeInBytes=0, ULong AddrProcThread, ULong PtrToParams=0, |
ULong CreationFlags=0, ULong Ptr_ThreadId=0), UnSigned,Pascal,DLL(TRUE)
END
MeProc PROCEDURE(ULong MeParam), Pascal !вызов через CreateThread
END
h Unsigned !Handle
tcs CString(1024),Static
CODE
tcs = 'что-то абрабкадабристое'
h = CreateThread(0, 25000, Address(MeProc), Address(tcs))
! если Handle не нужен, сразу, или когда станет не нужен:
CloseHandle(h) ! обязательно
Message('Основная программа завершена')
RETURN
!--------------------------------------------------------
MeProc PROCEDURE(ULong MeParam) !вызов через CreateThread
IN_TCS Group
Addr ULong(0)
Leng ULong(1024)
End
TCS Group,Over(IN_TCS)
ptr &CString
End
Code
! Обрабатываю MeParam, например, то, что по этому адресу
IN_TCS = MeParam ! настраиваю указатель, длина уже задана=1024
! теперь TCS.ptr указывает на строку, адрес которой передан в процедуру
Message(TCS.ptr) ! выводим "что-то абрабкадабристое"
Return
Код: Выделить всё
loop
if CLOCK() % 60 = 0 then что-нибудь .
do
надо таймер создавать и ловить событие таймера, суммировать время прошедшее по таймеру и если превысило 60, то что то делатьif CLOCK() % 60 = 0 then что-нибудь .
Код: Выделить всё
MAP
MODULE('Windows.dll')
GetLastError(), Long, Pascal, Dll
WaitForSingleObject(UnSigned Handle, ULong TimeOut_ms), ULong, Pascal, DLL, Proc
END
END
H UnSigned ! handle
MS ULong
WAIT_FAILED Equate(-1)
WAIT_OBJECT_0 Equate(0)
WAIT_TIMEOUT Equate(102h)
CODE
MS = 60 * 1000 ! 1 минута
! в H - получить handle отслеживаемого процесса, который должен исполняться в течение времени MS
! можно вообще - Handle своего процесса - он не закончится и сработка произойдёт по времени
WaitForSingleObject(H, MS)
! если нужно - можно узнать причину завершения ожидания
Case GetLastError()
Of WAIT_TIMEOUT
! время MS кончилось
Of WAIT_OBJECT_0
! ранее занятый Hanle освободился
Of WAIT_FAILED
! ошибка вызова
Else
! для разных объектов может быть ещё ряд причин - см. MSDN
End
File dbo.TableName could not be Opened. Error: Подключение занято до получения результатов для другого hstmt (S1000).