Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Вниз

Как правильно передать параметр в thread   Найти похожие ветки 

 
Роман_   (2002-12-14 19:47) [0]

Господа!
Никак не получается передать строку в поток, создаваемый с помощью CreateThread. Там строчка оказывается пустой. А хочется в процедуре Thread_ работать с переданным параметром str, который должен быть "1". Подскажите плз как грамотно передать параметр процедуре.

Вот код:

procedure TForm1.Button1Click(Sender: TObject);
var ids: dword;
str1: pstring;
begin
New(str1);
str1^ := IntToStr(1);
CreateThread(nil,0,@Thread_,str1,0,ids);
Dispose(str1);
end;

procedure Thread_(str:pstring);
begin
New(str);
Form1.Memo1.Lines.Add(str^); - выводит пустую строку
Dispose(str);
end;


 
Rouse_   (2002-12-14 20:05) [1]

function Thread_(str:PChar): DWORD; stdcall;
begin
Form1.Memo1.Lines.Add(String(str));
end;

procedure TForm1.Button2Click(Sender: TObject);
var ids: dword;
str1: PChar;
s:String;
begin
s:="1";
str1 := PChar(s);
CreateThread(nil,0,@Thread_,str1,0,ids);
end;


Желаю успехов


 
Роман_   (2002-12-14 20:16) [2]

Спасибо большое!
Работает.


 
Alex Konshin   (2002-12-14 20:27) [3]

Во-первых, используй BeginThread/EndThread

Use this routine or a TThread object to spawn separate threads of execution. BeginThread spawns a new thread of execution and sets the global IsMultiThread variable, thereby making the heap thread-safe.

Во-вторых, ты передаешь указатель на область памяти, где была строка, но при выходе из твоего метода та строка освобождается, и память уже используется под что-то другое.
Если уж так нужно передать именно строку, то время жизни этой String переменной должно быть больше, чем время, когда тебе требуется эта строка. Например, переменная может быть глобальной,
или быь полем в объекте, который живет достаточно долго, или это может быть PString, но удалятся он должен не после создания thread, а после ее уничтожения.



 
Роман_   (2002-12-15 00:46) [4]

Спасибо.
Особенно за объяснение про время существования переменной.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
3-96517
AlexAlex2
2003-01-14 11:15
2003.01.30
Параметры в запросе в dbExpress и Unkonwn error message 0


1-96817
Alexsys
2003-01-20 18:52
2003.01.30
Тащим файл на иконку - итог - приложение с открытым файлом?


3-96513
Лелик
2003-01-10 16:04
2003.01.30
MSSQL + .DLL by Delphi (Extended Stored Procedure)


14-97000
NoNik
2003-01-08 13:21
2003.01.30
БОДУН


1-96682
Сатир
2003-01-21 18:42
2003.01.30
Запись в конец потока символа конца строки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский