Текущий архив: 2006.07.16;
Скачать: CL | DM;
ВнизКак отправить строку в нить ? Найти похожие ветки
← →
learner © (2006-06-29 14:28) [0]Делаю так:
function MessToThread(ThreadID: DWord):integer;
var
Buf: string;
begin
Result:=0;
Buf:="bala - bala";
PostThreadMessage(ThreadID, 0, MY_MESSAGE_STRING, LPARAM(PChar(Buf)));
end;
В нити пытаюсь получить эту строчку :procedure ThreadProc(pParam: Pointer); stdcall;
var
Msg: TMsg;
begin
PeekMessage(Msg,0,0,0,pm_NoRemove);
while GetMessage(Msg,0,0,0) do
case Msg.wParam of
MY_MESSAGE_STRING:
MessageBox(0,PChar(Msg.lParam), PChar(Msg.lParam), MB_OK);
end;
end;
Она приходит, но, то у нее конец обрезан,
то дописано несколько символов, непечатных :))
Как исправить ситуацию ?
← →
Vlad © (2006-06-29 14:34) [1]
> learner © (29.06.06 14:28)
Я думаю, проблема в том, что Buf надо объявлять не как string, а как PChar, потом самостоятельно выделить память под строку, скопировать в эту область ваше "bala - bala", и только потом передать Buf в поток
← →
Игорь Шевченко © (2006-06-29 14:47) [2]
> Она приходит, но, то у нее конец обрезан,
> то дописано несколько символов, непечатных :))
PostThreadMessage(ThreadID, 0, MY_MESSAGE_STRING, LPARAM(NewStr(Buf)));
И в потоке
MessageBox(0,PChar(PString(Msg.lParam)^), PChar(PString(Msg.lParam)^), MB_OK);
Ну и освободить конечно по использовании
← →
learner © (2006-06-29 16:36) [3]>Игорь Шевченко
Спасибо. Помогло. Второй раз уже наступаю на эти грабли :((
← →
Fay © (2006-06-29 16:50) [4]NewStr allocates a new string on the heap. Do not use NewStr in new applications. This function is provided for backward compatibility only.
← →
learner © (2006-06-29 19:40) [5]>Fay
Т.е. примерно так ?function MessBoxThread(pValue: PChar): DWord; stdcall;
begin
Result:=0;
try
MessageBox(0,pValue,PChar(ParamStr(0)),MB_OK or MB_ICONINFORMATION);
finally
ReallocMem(pValue, 0);
end;
end;
function MessBox_Thread(const Mess:string): DWord;
var
pBuf: PChar;
ThreadID:DWord;
begin
pBuf:= GetMemory(Length(Mess) + 1);
CopyMemory(pBuf, PChar(Mess), Length(Mess) + 1);
Result:=CreateThread(nil, 0, @MessBoxThread, pBuf, 0, ThreadID);
end;
В хелпе ничего не сказано про функцию, которая будет заменять NewStr :((
← →
Fay © (2006-06-29 20:12) [6]Примерно так. Или так же.
← →
Leonid Troyanovsky © (2006-06-29 21:14) [7]
> learner © (29.06.06 19:40) [5]
> В хелпе ничего не сказано про функцию, которая будет заменять
> NewStr :((
Может SetString спасет отца (мать) русской демократии?
См. например
http://groups.google.com/group/fido7.ru.delphi/msg/5ce4ca000dc61a97
--
Regards, LVT.
Страницы: 1 вся ветка
Текущий архив: 2006.07.16;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.008 c