Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает CreateThread 
V
    Опции темы
SandyProgrammer
  Дата 3.7.2008, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Здравтсвуйте.
В Delphi World нашёл вот это:
Вызов процедуры в другом потоке: CreateThread(nil,0,@MyProcedure,0,0,nil); 
Попробовал, а не работает... Пишет ошибку: Types of actual and formal var parameters must be identical.
Тут что-то с фактическими параметрами не так, а что? Подскажите пожалуйста.
PM MAIL   Вверх
v1rtu0z
Дата 3.7.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 21.4.2008
Где: Воронеж

Репутация: нет
Всего: нет



напиши как ты попробовал...
может указатель типизированный передаешь?..
PM MAIL ICQ   Вверх
SandyProgrammer
Дата 3.7.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Вот так пробовал:
Код

procedure MyProcedure;
begin
//code here
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CreateThread(nil,0,@MyProcedure,0,0,nil);
end;

Я просто впервые с CreateThread познакомился.
PM MAIL   Вверх
Snowy
Дата 3.7.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Код
var
  id: DWORD;
begin
  CreateThread(nil, 0, @MyProcedure, nil, 0, id);
end;

PM MAIL   Вверх
ama_kid
Дата 3.7.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



SandyProgrammer, последний параметр объявлен как var, поэтому нельзя туда ни nil, ни 0 ста
Код
procedure TForm1.Button1Click(Sender: TObject);
var
 dw:Dword;
begin
 CreateThread(nil,0,@MyProcedure,nil,0,dw);
end;
вить:


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
SandyProgrammer
Дата 3.7.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Snowyama_kid, спасибо большое, теперь всё понятно.
PM MAIL   Вверх
Alexeis
Дата 3.7.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Чуток не по теме, но помниться борланд рекомендует использовать BeginThread вместо CreateThread. Там что-то связано с очисткой стека потока или еще с чем. В общем по соображениям безопасности smile .

Добавлено через 1 минуту и 54 секунды
Ага, вот цитата
Цитата(ms-help://borland.bds5/delphivclwin32/System_BeginThread.html)

 BeginThread spawns a new thread of execution and sets the global IsMultiThread variable, thereby making the heap thread-safe



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
SandyProgrammer
Дата 3.7.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Цитата(Alexeis @ 3.7.2008,  13:45)
Чуток не по теме, но помниться борланд рекомендует использовать BeginThread вместо CreateThread. Там что-то связано с очисткой стека потока или еще с чем. В общем по соображениям безопасности smile .

Да, читал про это, ещё хотел спросить, чем отличается CreateThread от BeginThread.
PM MAIL   Вверх
Alexeis
Дата 3.7.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(SandyProgrammer @  3.7.2008,  12:47 Найти цитируемый пост)
Да, читал про это, ещё хотел спросить, чем отличается CreateThread от BeginThread.

  Ну там еще запускается дополнительный код для включения механизма исключений в дополнительном потоке.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MetalFan
Дата 3.7.2008, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



ага, а так же в BeginThread нужно передавать локальную "паскалевякую" функцию, а в CreateThread - stdcall.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Rrader
  Дата 3.7.2008, 14:23 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 18
Всего: 191



Цитата(ama_kid @  3.7.2008,  20:36 Найти цитируемый пост)
поэтому нельзя туда ни nil, ни 0 ста

Когда ThreadID не нужен, то почему бы и нет smile 
Код

CreateThread(NIL, 0, @MyProcedure, NIL, 0, PLongWord(NIL)^);


Добавлено через 3 минуты и 29 секунд
Но в Win9x не прокатит...


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
ama_kid
Дата 3.7.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



Цитата(Rrader @  3.7.2008,  14:23 Найти цитируемый пост)
Когда ThreadID не нужен, то почему бы и нет smile 
Как говорится, "если нельзя, но очень хочется - то можно" smile Интересный финт ушами...  smile 



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
bems
Дата 3.7.2008, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(Alexeis @  3.7.2008,  14:08 Найти цитируемый пост)
Ну там еще запускается дополнительный код для включения механизма исключений в дополнительном потоке.
и менеджер памяти начинает работать в критических секциях



--------------------
Обижено школьников: 8
PM MAIL   Вверх
uranpro
Дата 4.7.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



интересно..

Код

try
 BeginThread(NIL, 0, @MyProcedure, NIL, 0, PLongWord(NIL)^);
except
 end;

как вы думаете, будет работать исправно ?

Добавлено через 4 минуты и 51 секунду
попробовал... жжесть, 2 ошибки выдает, одна из них про память)) не работает=(


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Alexeis
Дата 4.7.2008, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(uranpro @  4.7.2008,  10:17 Найти цитируемый пост)
как вы думаете, будет работать исправно ?

  Будет. Это ж передача по ссылке. Один пытается разыменовать указатель, а другой взять адрес. Компилятор обычно взаимоуничтожает такие операции smile

Добавлено через 1 минуту и 16 секунд
  Просто обманка для компилятора smile .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1207 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.