![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем здрасте) подскажите что делаю не так.
Пишу код который сканирует, все логические диски, а затем выводит сообщение о найденных файлах пользователю. Процедура CreateWindow, я подписал, это создания формы и вывод информации о найденных файлах. Но после того как поиск завершен форма, промелькнет на доли секунды и пропадает, то есть даже не выводит всю информацию. Как исправить, чтобы она не пропадала, что делаю не так? Код:
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; P.S. А в процессах остается висеть, убирать приходится через taskmgr. |
#2
|
||||
|
||||
![]() Возможно, что ваша форма - не главная в сборке, после создания она видимо скрывается, попробуйте добавить после этого ещё и form.show(modal)
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
||||
|
||||
![]() Скорее всего кривое использование WinAPI.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
|||
|
|||
![]() проблема найдена, но появилась другая. Я использую поиск файлов в потоке, чтобы программа не зависла. Так вот делаю так:
Код:
var ThID: DWORD; ... BeginThread(nil, 0, @FindDrive, nil, 0, ThID); то есть запуск просто цикла поиска, форма в конце появляется без проблем а в потоке лишь мелькает. Как эту задачу решить? Без потока нельзя, чтобы не было зависания. Последний раз редактировалось Anton93, 10.06.2015 в 23:50. |
#5
|
|||
|
|||
![]() Во первых, посмотри в msdn, какую сигнатуру должна иметь процедура, передаваемая третьим параметром в BeginThread.
|
#6
|
|||
|
|||
![]() какой параметр нужно передавать?
Код:
BeginThread(nil, 0, @FindDrive, здесь передаешь нужный указатель для обращению к нему из потока, 0, ThID); Код:
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; Посоветовали из процедуры procedure FindDrive; сделать функцию, Код:
function FindDrive(Param: Pointer): Integer; |
#7
|
||||
|
||||
![]() Код:
function trheadproc(p: pointer): cardinal; stdcall — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#8
|
|||
|
|||
![]() Цитата:
|
#9
|
||||
|
||||
![]() это так должна выглядеть ф-я, которая передается в createthread
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#10
|
||||
|
||||
![]() всегда было
Код:
Classes function ThreadProc(Thread: TThread): Integer; var FreeThread: Boolean; begin {$IFDEF LINUX} if Thread.FSuspended then sem_wait(Thread.FCreateSuspendedSem); {$ENDIF} try Пишу программы за еду. __________________ |