Waiter!

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Waiter!

Сообщение GSerg » 27.09.2004 (Пн) 20:10

Нет, в ресторан мы не пойдём.

Вместо этого мы заимеем Ожидалку - которая может ожидать любой HANDLE, который допускает такое с собой обращение. Можно создать сколько угодно ожидалок и ожидать ими всякие запущенные процессы. Всё это не будет блокировать основной поток выполнения. Событие Complete - всё, что нам нужно.

Код предельно примитивен :)

Просьба заценить и... ну, вы знаете :)


Обновлённая версия в Кирпичах
http://bbs.vbstreets.ru/viewtopic.php?t=13842
Последний раз редактировалось GSerg 14.02.2006 (Вт) 5:59, всего редактировалось 2 раз(а).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.09.2004 (Пн) 21:28

Я бы использовал GetModuleHandle вместо LoadLibrary/FreeLibrary: kernel32 гарантированно уже загружен, и можно несколько выиграть в скорости.
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.09.2004 (Пн) 21:40

Хм...
LoadLibrary выполняет поиск полного имени в таблице загруженных dll. GetModuleHandle делает то же самое. Если оно уже загружено, то LoadLibrary возвращает загруженный HMODULE. Так что никакой разницы, по идее.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.09.2004 (Пн) 22:50

Разница в том, что с GetModuleHandle не нужно ни хранить хэндлы, ни потом "выгружать" библиотеки.
Код упрощается до:
Код: Выделить всё
Private Sub UserControl_Initialize()
  hGlobal = GlobalAlloc(GMEM_ZEROINIT, 42)
  If hGlobal = 0 Then Err.Raise 7
 
  PutMem1 hGlobal, &H68
  PutMem4 hGlobal + 1, INFINITE
  PutMem4 hGlobal + 5, &H82474FF  'push [esp+0x8]   (lParam of thread)
  PutMem1 hGlobal + 9, &HE8
  PutMem4 hGlobal + 10, GetProcAddress(GetModuleHandle("kernel32"), "WaitForSingleObject") - hGlobal - 10 - 4
 
  PutMem1 hGlobal + 14, &H68
  PutMem1 hGlobal + 19, &H68
  PutMem1 hGlobal + 24, &H68
  PutMem4 hGlobal + 25, WM_LBUTTONUP
  PutMem1 hGlobal + 29, &H68
  PutMem4 hGlobal + 30, UserControl.hWnd
  PutMem1 hGlobal + 34, &HE8
  PutMem4 hGlobal + 35, GetProcAddress(GetModuleHandle("user32"), "PostMessageA") - hGlobal - 35 - 4
  PutMem4 hGlobal + 39, &H4C2&
End Sub

Private Sub UserControl_Terminate()
  TerminateWait
  GlobalFree hGlobal
End Sub
Изображение

winnydows
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 12.02.2006 (Вс) 2:38

Сообщение winnydows » 14.02.2006 (Вт) 1:01

А как Waiter реализовать под VB.NET (2003) ? Простая конвертация даёт ошибки. Например As Any not supported.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.02.2006 (Вт) 5:55

Например под VB.NET в нём нет необходимости. Всё делается методами FW.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

winnydows
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 12.02.2006 (Вс) 2:38

Сообщение winnydows » 15.02.2006 (Ср) 20:22

А можно плиз поподробнее как называются эти методы, чтобы в MSDN почитать или может у вас на сайте статейка на тему есть.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.02.2006 (Ср) 20:28

Класс WaitHandle, метод WaitOne.
Изображение


Вернуться в Наши проекты

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

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

    TopList