Суббота, 21.12.2024, 15:06 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Волк-1024, Anton93, xXxSh@dowxXx  
Проблема с потоком...
HTTqpДата: Четверг, 11.06.2015, 19:18 | Сообщение # 1
Частый гость
Зарегистрирован: 08.10.2014
Группа: Пользователи
Сообщений: 57
Статус: Offline
Вобщем пишу программу, она ищет файлы в конце выводит результат. Изначально при запуске формы нет, она появляется когда все диски просканированы и файлы все найдены. Так вот, поиск делаю в потоке. Но проблема в том что после того как поиск файлов закончен форма, промелькнёт на доли секунду и пропадает, хотя программа в диспетчере остается висеть. После поисков проблемы, оказалось что это все из-за запуска поиска в потоке. Вот код:

Код

procedure FindDrive;
var
   DiskList: DWORD;
   Drive: Char;
begin
   DiskList := GetLogicaldrives;
   Drive := 'a';
     while (DiskList > 0) do
       begin
         case GetDriveType(Pchar(Drive + ':\')) of
           3: FindFile(Drive + ':\');
         end;
       Disklist := Disklist shr 1;
       Inc(Drive);
     end;
    CreateWindow;//Процедура создания и отображения формы WINAPI
end;
...
BeginThread(nil, 0, @FindDrive, nil, 0, ThID); //Запускаю отдельно поток.


если делать без потока просто запустить поиск все нормально и форма при окончании поиска появляется и не исчезает. Но без потока нельзя.
тогда преложили сделать из процедуры procedure FindDrive;, функцию function FindDrive(Param: Pointer): Integer;. Но что передавать в переменную Param, я не понимаю.

И еще вопрос какой параметр нужно передавать?
Код
BeginThread(nil, 0, @FindDrive, здесь передаешь нужный указатель для обращению к нему из потока, 0, ThID);


Прошу помощи, заранее благодарю.
 
ramzeswrДата: Пятница, 12.06.2015, 08:19 | Сообщение # 2
Участник
Зарегистрирован: 17.04.2013
Группа: Пользователи
Сообщений: 61
Статус: Offline
http://grabberz.com/showthread.php?t=24619
Вот отличный мануал по потокам
 
xXxSh@dowxXxДата: Пятница, 12.06.2015, 17:13 | Сообщение # 3
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
HTTqp попробуй оставить в потоке только поиск с расчетами, а все остальное убери в основной код (в процедуру например), с использованием всевозможных проверок на выполнение (порой очень полезно), должно получиться, в поток нельзя просто так пихать все подряд!

PS: готовым кодом помочь не могу, нет возможности проверить на момент написания поста.
 
HTTqpДата: Суббота, 13.06.2015, 19:10 | Сообщение # 4
Частый гость
Зарегистрирован: 08.10.2014
Группа: Пользователи
Сообщений: 57
Статус: Offline
Цитата
HTTqp попробуй оставить в потоке только поиск с расчетами, а все остальное убери в основной код (в процедуру например), с использованием всевозможных проверок на выполнение (порой очень полезно), должно получиться, в поток нельзя просто так пихать все подряд!

PS: готовым кодом помочь не могу, нет возможности проверить на момент написания поста.

я бы рад оставить только поиск с расчетами, но как тогда отловить значение что поиск завершен на жестком диске и показать отчет? Просто мучаюсь уже не 1 день, куда только не пребывал пристроить, ни чего не выходит по уму.
 
xXxSh@dowxXxДата: Воскресенье, 14.06.2015, 00:19 | Сообщение # 5
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Цитата HTTqp ()
но как тогда отловить значение что поиск завершен на жестком диске и показать отчет?

ramzeswr уже привел чуть выше ссылку на статью в которой есть ответ.
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz