线程的基本问题,大家帮忙看看,谢谢(100分)

  • 主题发起人 主题发起人 pcanywhere
  • 开始时间 开始时间
P

pcanywhere

Unregistered / Unconfirmed
GUEST, unregistred user!
程序如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
testthread.Create(false);
end;
end.
--------------------------------------------------------------------
unit Unit2;
interface
uses
Classes,SysUtils;
type
testthread = class(TThread)
private
procedure test;
{ Private declarations }
protected
procedure Execute;
override;
end;
implementation
uses unit1;
{ testthread }
procedure testthread.Execute;
begin
Synchronize(test);
end;
procedure testthread.test;
var
i:integer;
begin
for i:=0 to 10000do
form1.caption:=inttostr(i);
end;
end.

--------------------------------------------------------
为何在程序运行的时候,我同时去移动窗体,程序没有响应,不能移动,
直到运行结束,应该怎样做??谢谢
 
for i:=0 to 10000do
begin
form1.caption:=inttostr(i);
application.ProcessMessages;//前面需要引用forms单元
end;
 
什么反应都没有啊,不像你说的不响应啊
 
你把线程的执行部分全部同步了 “Synchronize(test);”其实就跟没用线程一样
 
楼上正解.
 
"来如风"的方法在执行的时候可拖动form;
迷糊,fu_qi_ming;
那应该如何写?
 
发现一个问题,就是开始运行的时候,最小化窗口,再恢复窗口,form1.caption的值就变为10000,怎么会这样的??
 
对于界面的操作,要写在线程里吗?有这个需求吗?
写在线程里也要同步到主线程里的.
 
为什么我看不见讨论的内容?????????????//
 
procedure testthread.Execute;
begin
Synchronize(test);
end;
改成:
procedure testthread.Execute;
begin
test;
end;
即可,照楼主的程序来看不需要解决同步问题。
 
加入事件等待
 
学习线程不要用VCL的属性,否则会干扰你们学习线程的初衷。
因为VCL大部分不是线程安全的,而一但用到Synchronize,又会对
线程产生误解,因为Synchronize又把多线程变回单线程了。
 
你一直占着它,它当然没空理你
 
[red]modify to try:[/red]
unit Unit2;
interface
uses
Classes,SysUtils;
type
testthread = class(TThread)
private
{ Private declarations }
protected
procedure Execute;
override;
end;
implementation
uses unit1;
{ testthread }
procedure testthread.Execute;
var
i:integer;
begin
for i:=0 to 10000do
form1.caption:=inttostr(i);
end;
end.

 
后退
顶部