Запуск функции в фоне
От: КДА  
Дата: 10.12.02 10:31
Оценка:
Здравствуйте.
Нужно запустить функцию, которая копирует файл. Если файл большой, поток в котором выполняктся программа "подвисает". Т.е. окно программы не отвечает (не складывается, не обновляется ...), до тех пор, пока функция не закончит работать. Как из VB запустить фунцию в фоновом режиме..(?) чтобы окно программы оставалось жизнеспособным, а функция выполнялясь себе там...

Заранее спасибо!
Re: Запуск функции в фоне
От: Silent_Sky Россия http://www.rsdn.ru/tools/member.aspx?id=
Дата: 10.12.02 11:48
Оценка:
Здравствуйте, КДА, Вы писали:

КДА>Здравствуйте.

КДА>Нужно запустить функцию, которая копирует файл. Если файл большой, поток в котором выполняктся программа "подвисает". Т.е. окно программы не отвечает (не складывается, не обновляется ...), до тех пор, пока функция не закончит работать. Как из VB запустить фунцию в фоновом режиме..(?) чтобы окно программы оставалось жизнеспособным, а функция выполнялясь себе там...

КДА>Заранее спасибо!


Используй АПИ функцию CopyFile для копирования

Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
' Скопируем файл C:\Samples\temp.txt в C:\Russia\buffer.txt.
' Не будем переписывать файл C:\Russia\buffer.txt если он существует.
Dim retval As Long ' возвращаемое значение

' копируем файл
retval = CopyFile("C:\Samples\temp.txt", "C:\Russia\buffer.txt", 1)
If retval = 0 Then ' если ошибка
Debug.Print "Не могу скопировать файл -- C:\Russia\buffer.txt уже существует.
Else ' если все нормально
Debug.Print "Файл скопирован."
End If
Когда-нибудь и я буду много знать, но пока это не грозит...
ICQ #134433
Re[2]: Запуск функции в фоне
От: КДА  
Дата: 10.12.02 12:12
Оценка:
Здравствуйте, Silent_Sky, Вы писали:

SS>Используй АПИ функцию CopyFile для копирования


SS>Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

SS>' Скопируем файл C:\Samples\temp.txt в C:\Russia\buffer.txt.
SS>' Не будем переписывать файл C:\Russia\buffer.txt если он существует.
SS>Dim retval As Long ' возвращаемое значение

SS>' копируем файл

SS>retval = CopyFile("C:\Samples\temp.txt", "C:\Russia\buffer.txt", 1)
SS>If retval = 0 Then ' если ошибка
SS> Debug.Print "Не могу скопировать файл -- C:\Russia\buffer.txt уже существует.
SS>Else ' если все нормально
SS> Debug.Print "Файл скопирован."
SS>End If


Я допустил неточность в постановке вопроса (за это прошу прощения). Суть в том, что функция предназначена не для простого копирования... Эту функцию предоставляет компонент (ActiveX DLL), и она не только копирует файл, но и размещает его в БД (в бинарном виде). Но это ну суть важно... Что конкретно делает эта функция я не знаю. Нужно, чтобы она (функция) не мешала окну жить в то время, как она выполняется.
ЗЫ. Все равно спасибо за внимание и ответ
Re: Запуск функции в фоне
От: Toughpheeckouse Россия  
Дата: 10.12.02 12:43
Оценка: 6 (1)
Здравствуйте, КДА, Вы писали:

КДА>Здравствуйте.


КДА>Заранее спасибо!


те тебе нада запускать эту функцию в отдельном потоке

вот здесь пример как запускать потоки в VB
Думайте сами, решайте сами...
Re: Запуск функции в фоне
От: Korsar  
Дата: 10.12.02 13:01
Оценка:
Здравствуйте, КДА, Вы писали:

КДА>Здравствуйте.

КДА>Нужно запустить функцию, которая копирует файл. Если файл большой, поток в котором выполняктся программа "подвисает". Т.е. окно программы не отвечает (не складывается, не обновляется ...), до тех пор, пока функция не закончит работать. Как из VB запустить фунцию в фоновом режиме..(?) чтобы окно программы оставалось жизнеспособным, а функция выполнялясь себе там...

КДА>Заранее спасибо!


Еще одним решением является реализация CallBack функции
Посмотри в MSDN этот вопрос достаточно хорошо описан для VB в том числе
Re[2]: Запуск функции в фоне
От: КДА  
Дата: 10.12.02 13:19
Оценка:
Здравствуйте, Toughpheeckouse, Вы писали:

T>Здравствуйте, КДА, Вы писали:


КДА>>Здравствуйте.


КДА>>Заранее спасибо!


T>те тебе нада запускать эту функцию в отдельном потоке


T>вот здесь пример как запускать потоки в VB


Посмотрел пример. Это как раз то что нужно. Большое спасибо!
Re: Запуск функции в фоне
От: mik1  
Дата: 11.12.02 15:00
Оценка: 10 (1)
Здравствуйте, КДА, Вы писали:

КДА>Здравствуйте.

КДА>Нужно запустить функцию, которая копирует файл. Если файл большой, поток в котором выполняктся программа "подвисает". Т.е. окно программы не отвечает (не складывается, не обновляется ...), до тех пор, пока функция не закончит работать. Как из VB запустить фунцию в фоновом режиме..(?) чтобы окно программы оставалось жизнеспособным, а функция выполнялясь себе там...

КДА>Заранее спасибо!


Может я немного торможу, но такая проблема частеько решается созданием невидимой НЕМОДАЛЬНОЙ формы, в коде которой запускается фоновая задача. Если неправ — поправьте, пожалуйста.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.