Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/17: Рейтинг темы: голосов - 17, средняя оценка - 4.53
systeam
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 8
1

CreateThread

12.07.2012, 11:55. Просмотров 3184. Ответов 10
Метки нет (Все метки)

Есть процедура
Delphi
1
TForm1.URLVSLIST(URL: String; List: TsListView): string;
при ее выполнении программа напрочь зависает до окончания пытаюсь запустить в потоке вот так
Delphi
1
CreateThread(NIL, 0, @TForm1.URLVSLIST('http://ziser.ru/cf/ceats_cf/',ListView1), NIL, 0, PLongWord(NIL)^);
Delphi ругается
что тут не так буду очень благодарен
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2012, 11:55
Ответы с готовыми решениями:

Ошибка при CreateThread
function potok(VOTE,VIDEO_ID:string; value,i,NUMBER :integer;...

Создание потоков через CreateThread
Люди, Расскажите что такое потоки в Delphi, которые делаются с помощью команды...

Как передать в функцию адрес CreateThread
Как передать в функцию адрес CreateThread Не могу передать в функцию...

Как быть с потоками, которые создаются через CreateThread?
Для синхронизации потока с основной формой используется Synchronize при работе...

CreateThread
Есть функция: void one() { while(1) { cout << "1"; } }

10
murderer
3321 / 1467 / 134
Регистрация: 06.10.2010
Сообщений: 3,230
12.07.2012, 12:08 2
@TForm1.URLVSLIST('http://ziser.ru/cf/ceats_cf/',ListView1)
Ты хоть понял что написал?

В CreateThread нужно передавать указатель на процедуру вида
Delphi
1
procedure ThreadProc(lParam: dword);stdcall;
Можно сделать так
Delphi
1
2
3
4
5
6
procedure ThreadProc(lParam: dword);stdcall;
begin
  TForm1.URLVSLIST('http://ziser.ru/cf/ceats_cf/',ListView1);
end;
...
CreateThread(0,0,@ThreadProc,0,0,pdword(0)^);
1
systeam
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 8
12.07.2012, 12:26  [ТС] 3
Delphi
1
2
3
4
procedure ThreadProc(lParam: dword);stdcall;
begin
  TForm1.URLVSLIST('http://ziser.ru/cf/ceats_cf/',ListView1);
end;
Ругает
[Ошибка] CZModule.pas (162): Эта форма вызова метода разрешено только для методов класса
0
Somebody
2802 / 1613 / 251
Регистрация: 03.12.2007
Сообщений: 4,215
Завершенные тесты: 3
12.07.2012, 12:32 4
Может быть, TForm1.URLVSLIST - не class function?
1
systeam
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 8
12.07.2012, 12:49  [ТС] 5
Цитата Сообщение от Somebody Посмотреть сообщение
Может быть, TForm1.URLVSLIST - не class function?
Правил то же самое
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26477 / 17781 / 7034
Регистрация: 22.10.2011
Сообщений: 31,295
Записей в блоге: 6
12.07.2012, 12:56 6
Что правил? Вызываться через тип класса (а не через экземпляр) могут только Class-методы, описанные вот так:
Delphi
1
2
3
4
type
   TForm1 = class(TForm)
   // ...
      class procedure URLVSLIST(s : string; lv : TListView);
Либо описываешь URLVSLIST простым методом, без слова class, и вызываешь так:
Delphi
1
2
3
4
procedure ThreadProc(lParam: dword);stdcall;
begin
  Form1.URLVSLIST('http://ziser.ru/cf/ceats_cf/',Form1.ListView1);
end;
2
murderer
3321 / 1467 / 134
Регистрация: 06.10.2010
Сообщений: 3,230
12.07.2012, 13:06 7
Не знал, что в Delphi есть статические методы.
1
systeam
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 8
12.07.2012, 13:20  [ТС] 8
Delphi
1
2
3
4
procedure ThreadProc(lParam: dword);stdcall;
begin
  Form1.URLVSLIST('http://ziser.ru/cf/ceats_cf/',Form1.ListView1);
end;
не понимает что такое ListView1 хотя он есть

class procedure URLVSLIST(s : string; lv : TListView); ругается на все компоненты

Добавлено через 10 минут
Все робит спс просто я чуть в delphi деревянный 1 вопрос остался почему теперь при завершении программы вылетает ошибка (недоступен дескриптор окна )
0
murderer
3321 / 1467 / 134
Регистрация: 06.10.2010
Сообщений: 3,230
12.07.2012, 13:27 9
почему теперь при завершении программы вылетает ошибка (недоступен дескриптор окна )
А ты не создаешь новые экземпляры компонентов VCL в этом потоке?

Добавлено через 2 минуты
Может добавить TerminateThread на onClose.
1
systeam
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 8
12.07.2012, 13:39  [ТС] 10
А ты не создаешь новые экземпляры компонентов VCL в этом потоке?
нет
TerminateThread
[Предупреждение] CZModule.pas (498): Для переменной цикла управления должна быть простой локальной переменной
и не запускается

Добавлено через 2 минуты
да и еще я через таймер с интервалом 1000 вызываю CreateThread(0,0,@ThreadProc,0,0,pdword(0)^); может это помеха ?
0
murderer
3321 / 1467 / 134
Регистрация: 06.10.2010
Сообщений: 3,230
12.07.2012, 14:10 11
да и еще я через таймер с интервалом 1000 вызываю CreateThread(0,0,@ThreadProc,0,0,pdword(0)^); может это помеха?
То есть ты вызываешь URLVSLIST не дожидаясь завершения предыдущего вызова. Уверен, что это правильно? URLVSLIST расчитана на параллельное выполнение?
1
12.07.2012, 14:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2012, 14:10

CreateThread
Как использовать CreateThread в CLR проекте (для метода в классе)? Если просто...

CreateThread
В общем, нужно создать отдельный поток. Для этого вызываю функцию...

CreateThread в WindowsForms
Доброго времени суток, помогите плз разобраться. Пытаюсь в форме создать поток...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru