Карта0
Карта1
Карта2
Карта3
Карта4
Карта5
Карта6
Карта7
Карта8
Карта9
Карта10
Карта11
Карта12
Карта13
Карта14
Карта15
Карта16
Карта17
Карта18
Карта19
Карта20
Карта21
Карта22
Карта23
Карта24
Карта25
Карта26
Карта27
Карта28
Карта29
Карта30
Карта31
Карта32
Карта33
Карта34
Карта35
Карта36
Карта37
Карта38
Карта39


Наш форум » Железо и софт. Вопросы и ответы. » Программирование » Delphi и потоки

Ответ
Старый 21.03.2007, 09:37   #1 (permalink)
Sky
Child of Darkness
 
Аватар для Sky
 
Регистрация: 24.02.2007
Адрес: 2 Железнодорожная, д.38
Возраст: 22
Сообщений: 771
Репутация: 22
Delphi и потоки


Вообщем ситуация такая: есть dll в которую засунута форма, есть процедурка, которой передаются три параметра (InFile,OutFile: String; LevelArch: byte). Нужно сделат так чтобы когда запускается dll, из неё запускалась форма, на которойбудет двигаться анимашки через компонент TAnimate - с этим проблем нет. И так же запускался поток, который выполнялся бы параллельно той форме, которому передались бы параметры и он бы там уже делал действия, после выполнения их, мило уничтожился. Есть у кого-нить мысли как такое сделать. Всё ето нужно для того чтобы пока выполняется процедурка программа не подвисала, идеи с Application.ProcessMessages; не предлагать так как нет возможности её засунуть.
Sky вне форума   Ответить с цитированием
Старый 25.03.2007, 22:55   #2 (permalink)
Местный
 
Аватар для Grand Father
 
Регистрация: 03.03.2007
Адрес: Москва, Люблино
Возраст: 33
Сообщений: 946
Репутация: 132
Провайдер: Другой


А использовать CreateThread религия не позволяет?
Grand Father вне форума   Ответить с цитированием
Старый 25.03.2007, 23:56   #3 (permalink)
Sky
Child of Darkness
 
Аватар для Sky
 
Регистрация: 24.02.2007
Адрес: 2 Железнодорожная, д.38
Возраст: 22
Сообщений: 771
Репутация: 22


А для тупорылых? пО-подробнее...
Sky вне форума   Ответить с цитированием
Старый 26.03.2007, 06:25   #4 (permalink)
Местный
 
Аватар для Grand Father
 
Регистрация: 03.03.2007
Адрес: Москва, Люблино
Возраст: 33
Сообщений: 946
Репутация: 132
Провайдер: Другой


Пишешь функцию, которую хочешь выполнять параллельно, например foo(). Создаешь поток (тред, нитку, кому как нравится) через CreateThread(0, 0, foo, 0, 0, &id). Функция начинает выполняться. Более подробно - в MSDN.
Grand Father вне форума   Ответить с цитированием
Старый 26.03.2007, 13:28   #5 (permalink)
Sky
Child of Darkness
 
Аватар для Sky
 
Регистрация: 24.02.2007
Адрес: 2 Железнодорожная, д.38
Возраст: 22
Сообщений: 771
Репутация: 22


Хе-Хе если сработает. То...... угагагагага
Sky вне форума   Ответить с цитированием
Старый 26.03.2007, 13:31   #6 (permalink)
Sky
Child of Darkness
 
Аватар для Sky
 
Регистрация: 24.02.2007
Адрес: 2 Железнодорожная, д.38
Возраст: 22
Сообщений: 771
Репутация: 22


Если эта функция, то CreateThread(0, 0, foo, 0, 0, &id) присваивать како-нить переменной, чтоб вернула значение?
С процедуркой также?
&id - это что такое?
Sky вне форума   Ответить с цитированием
Старый 26.03.2007, 13:42   #7 (permalink)
Местный
 
Аватар для Grand Father
 
Регистрация: 03.03.2007
Адрес: Москва, Люблино
Возраст: 33
Сообщений: 946
Репутация: 132
Провайдер: Другой


CreateThread возвращает хендл потока, с которым потом можно выполнять всякие нехорошие действия типа SuspendThread, ResumeThread или вообще TerminateThread. id - идентификатор потока, тебе он, в принципе, не нужен, но если его не принимать, то компилятор будет сердиться. Процедурка (foo) должна иметь определенный тип: DWORD WINAPI foo(LPVOID). Короче, RTFM MSDN!
Grand Father вне форума   Ответить с цитированием
Старый 26.03.2007, 14:45   #8 (permalink)
Sky
Child of Darkness
 
Аватар для Sky
 
Регистрация: 24.02.2007
Адрес: 2 Железнодорожная, д.38
Возраст: 22
Сообщений: 771
Репутация: 22


Мля, давай ещё проще, есть:
procedure CompressFile(const sFileIn : string; const sFileOut : string; const Level : TCompLevel = clDefault);
вот её CompressFile(InFile,OutFile,Level); мне надо засунуть в поток, и тут же выполнить другое действие, не дожидаясь окончания выполнения етой процедуры.
Я делаю CreateThread(0, 0, CompressFile(InFile,OutFile,Level), 0, 0, &id); После чего появляется ошибка при компиляции: Incompatible types: 'procedure, untyped pointer or untypes parameter' and 'Pointer'
Как надо прописать процедурку и после етой строчки надо её как-то ещё отдельно запускать останавливать?
P.S. С MSDN не дружу.
Sky вне форума   Ответить с цитированием
Старый 26.03.2007, 17:38   #9 (permalink)
Местный
 
Аватар для Grand Father
 
Регистрация: 03.03.2007
Адрес: Москва, Люблино
Возраст: 33
Сообщений: 946
Репутация: 132
Провайдер: Другой


Во-первых, функция должна быть описана как DWORD WINAPI CompressFile(LPVOID). Во-вторых, в CreateThread тебе надо передать указатель на нее, т. е. просто CompressFile без скобочек!!! о чем тебе любезно написал компилятор. Все параметры функции надо объединить в структуру и ее адрес передавать в качестве параметра функции, например CreateThread(0, 0, CompressFile, (void*)&struct_name, 0, 0, &id). В-третих, без MSDN ты все равно это никогда не сделаешь, поэтому брось эту затею и ищи другой метод.
Grand Father вне форума   Ответить с цитированием
Старый 26.03.2007, 19:39   #10 (permalink)
Sky
Child of Darkness
 
Аватар для Sky
 
Регистрация: 24.02.2007
Адрес: 2 Железнодорожная, д.38
Возраст: 22
Сообщений: 771
Репутация: 22


Хм, без MSDN не сделаю, а Ты помочь сможешь? Надо то всего одну процедурку сделать.
Sky вне форума   Ответить с цитированием
Ответ




Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi - Need help MisterVic Программирование 3 16.08.2007 23:01



При копировании информации ссылка на источник обязательна!

Часовой пояс GMT +4, время: 04:13.
vBulletin® Version 3.8.2.Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot
Template-Modifications by TMS