rasapi32

Раздел посвящен программированию с использованием Power Basic.
kvn
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 21.05.2008 (Ср) 10:39

rasapi32

Сообщение kvn » 06.08.2008 (Ср) 21:47

Здравствуйте, необходима помощь.

Пишу программу-сервис для закачки файлов через фтп. Программа должна сама устанавливать соединение. Пока что пользуюсь такой функцией(раскопал в 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 не помогает. Как потоку, который пытается запустить функцию на установку соединения, узнать что эту функцию запустил уже другой поток(если вопрос элементарный не смейтесь).

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 07.08.2008 (Чт) 7:50

Я Базовые Мощности :) не видел, но сдается мне, Вам поможет глобальная переменная, допустим булева, которой присваивается истина, когда первый поток запускает соединение и ложь, когда устанавливает. Соответственно любой поток при запуске проверяет истинность этой переменной.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList