Пишу программу-сервис для закачки файлов через фтп. Программа должна сама устанавливать соединение. Пока что пользуюсь такой функцией(раскопал в POFFS и модифицировал под собственные нужды)
- Код: Выделить всё
#INCLUDE "Ras32.inc"
FUNCTION connect_vpn() AS LONG
DIM Conn_name AS ASCIIZ*50
DIM Conn_user AS ASCIIZ*50
DIM Conn_pass AS ASCIIZ*50
DIM rdParams AS RASDIALPARAMS
Conn_name=GETINI("default", "Network_name" , apppath+"\setting.ini")
Conn_user=GETINI("default", "User_net" , apppath+"\setting.ini")
Conn_pass=GETINI("default", "pass_net" , apppath+"\setting.ini")
rdParams.dwSize = SIZEOF(rdParams)
rdParams.szEntryName=Conn_name
rdParams.szUserName = Conn_user
rdParams.szPassword = Conn_pass
DIM hRasConn AS LONG
hRasConn = 0
IF RasDial(BYVAL 0&, "", rdParams, 0&, 0&, hRasConn) = 0 THEN
FUNCTION=1
ELSE
writelog "Нет подключения. Устанавливаем"
RasHangUp hRasConn
FUNCTION=0
END IF
END FUNCTION
В процессе работы запускаются в потоках задания на закачку, при запуске сервиса функцией connect_vpn устанавливается соединение. Проблема в том, что в случае разрыва связи активные потоки пытаются одновременно установить соединение и если таких потоков много(если 1-2 потока и время для установления не превышает 1-2 минуты - нормально), то программа виснет. RasGetConnectStatus не помогает. Как потоку, который пытается запустить функцию на установку соединения, узнать что эту функцию запустил уже другой поток(если вопрос элементарный не смейтесь).