Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
ВнизЗависает создание потока Найти похожие ветки
← →
исследователь © (2007-06-29 18:42) [0]Вот код, откуда вызываю:
procedure TForm1.btnFloodClick(Sender: TObject);
begin
b:=not b;
if b then begin
hThread:=createthread(nil,0,@lpFlooding,nil,0,threadid);
if(hThread=0)then
begin
showmessage("Cannot create thread!");
Exit;
end;
waitforsingleobject(hThread,INFINITE);
btnFlood.Caption:="Прекратить!";
end
...
вот сама процедура lpFlooding:
function lpFlooding(lpData:Pointer):integer;
var
i:integer;
begin
for i:=1 to 10 do
showmessage("x");
// на самом деле мессага другая и в других целях, но не суть важно
result:=1;
end;
при нажатии на кнопку все виснет! в чем проблема?
← →
TUser © (2007-06-29 18:47) [1]ShowMessage из потока - зря.
← →
исследователь © (2007-06-29 18:58) [2]да я это для примера привел, там на деле в InputBox значение вводится, и не 10 раз, а просто 2 значения
← →
TUser © (2007-06-29 19:05) [3]Хм, а InputBox потокобезопасен? Он же вроде - кусок VCL (не то SysUtils, не то Dialogs, не то еще что-то), разве нет?. Я просто не в курсе.
← →
DiamondShark © (2007-06-29 19:06) [4]А где в потоке message pump?
← →
исследователь © (2007-06-29 19:08) [5]а вот подскажите, как верно организовать?
← →
Джо © (2007-06-29 19:11) [6]> [5] исследователь © (29.06.07 19:08)
> а вот подскажите, как верно организовать?
Работать с пользовательским интерфейсом в контексте главного потока.
← →
DiamondShark © (2007-06-29 19:17) [7]
> а вот подскажите, как верно организовать?
чего именно верно организовать?
Если многопоточный UI средствами VCL, то "верно" -- никак. Не предназначено оно для многопоточного использования.
Либо внятно сформулируй задачу более верзнего уровня.
Потому как приведённый код -- бессмыслица.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c