Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2012, 15:54   #1
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание createthread и передача параметра процедуре

Вопрос^ можно ли передать процедуре в потоке параметр, если я использую для создания потока вот такой код:
Код:
createthread(nil,0,@MyProcedure,0,0,trid);
именно через параметр а не через глобал переменную.
fucil вне форума Ответить с цитированием
Старый 17.01.2012, 16:58   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

F1:

Цитата:
lpParameter [in, optional]
A pointer to a variable to be passed to the thread.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 17.01.2012, 16:59   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

И, кстати.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 17.01.2012, 21:10   #4
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание

Да прочитал сделал так:
Код:
//Сама процедура для потока
procedure MyProcedure(str: pointer);
var
  ptrString : PString;
begin
ptrString := Addr(str);
showmessage(ptrString^); //Знаю что тут бред написал так как не сталкивался с pointer.
end;

//Создание потока
procedure TForm1.Button5Click(Sender: TObject);
var
str: string;
begin
str:='привет';
createthread(nil,0,@MyProcedure,Addr(str),0,trid);
end;
как передать понял, а как получить параметр не понял !
fucil вне форума Ответить с цитированием
Старый 18.01.2012, 20:03   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

параметр str в процедуре потока.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.01.2012, 02:06   #6
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание неработает

как показано на примере-выше, я так и делал, только что-то оно не работает !
fucil вне форума Ответить с цитированием
Старый 19.01.2012, 02:16   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)нельзя передавать указатель на чисто локальный объект.
2)
Код:
//Сама процедура для потока
procedure MyProcedure(param: pointer);
var
  str : String;
begin
str:=PChar(param);
showmessage(str);
StrDispose(PChar(param));
end;

//Создание потока
procedure TForm1.Button5Click(Sender: TObject);
var
str: string;
begin
str:='привет';
createthread(nil,0,@MyProcedure,StrNew(str),0,trid);//создали строку в куче.
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.01.2012, 15:48   #8
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание

Пепел Феникса спасибо тебе большое за уделенное мне время !
Изучу твой код что и почему спасибо.

Все гуд только когда закрываю форму вываливает ошибку
проблема скрывается тут:
Код:
StrDispose(PChar(param));

Последний раз редактировалось fucil; 19.01.2012 в 16:07.
fucil вне форума Ответить с цитированием
Старый 19.01.2012, 19:07   #9
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

поточная функция должна быть stdcall
rpy3uH вне форума Ответить с цитированием
Старый 19.01.2012, 19:19   #10
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание Спасибо всем !

Все гуд работает на ура ))


Тему можно закрыть !
fucil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi] Передача параметров процедуре Язь Помощь студентам 0 09.12.2011 17:38
Передача метода класса в CreateThread mike_tihomirov Win Api 3 17.07.2010 14:13
Передача параметра процедуре FormCreate Grandistok Общие вопросы Delphi 3 24.04.2010 15:42
Создание подпрограм.Передача массива как параметра процедуре AbrahamLincoln Помощь студентам 5 20.09.2009 19:39