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 уже привел чуть выше ссылку на статью в которой есть ответ.
|
|
|
|