比如我有三个过程,同时调用一个函数,这个函数在调用的时候,会在内存中同时拷贝三份,还是只有一份,这个函数里面的局部变量会不会互相干扰?还是虽然是同一个局部变量,但是调用的时候,存在三个变量副本?
解决方案 »
- delphi7使用ClientSocket.Socket.ReceiveText接收上的问题请教一下大神
- TDBListBox滚动条添加
- delphi7 结构体数组 解析。。
- TDrawGrid控件问题,急等!!!!!!!
- 如何检测字符串中是否有某些字符
- 大家都来接分,发分了!写写自己的感想!顶一下都有分!
- s1:=copy(sd,1,4)是什么意思?在线等
- 我是菜鸟!用delphi想编一个将excel中的内容导入到TDBGrid组件中!急需要一个现成的例子,急急急急急急急!
- odbc 問題
- 100分求教:用什么控件可以进行可视化网页设计
- 怪事,MEMO载入TXT文件档不完整
- 关于数据库主体、镜像故障自动转移后ADO 的ConnectionString配置问题。在线等~~~
begin
aa('btn2 : ');
end;procedure TForm1.btn1Click(Sender: TObject);
begin
aa('btn1 : ');
end;procedure TForm1.aa(a : string);
var
I : Integer;
begin
for I := 1 to 5000 do begin
mmo1.Lines.Add(a + IntToStr(I));
Application.ProcessMessages;
end;btn1执行到一半,btn2插入,把btn2的先执行完了,然后把btn1的继续执行完,输出都是1--5000
为什么会把原来执行的过程给停止了,执行后进入,难道是真的是类似这种堆栈当btn2点击时,btn1执行到Application.ProcessMessages,此过程检索消息队列中的消息,刚好检索到btn2的点击消息,于是由ProcessMessages内部的DispatchMessage分派消息到窗口过程,最终调用btn2click,调用完之后,DispatchMessage和ProcessMessages相继返回,继续执行btn1click中的代码.
在程序中有时间控件的前提下,如果有以下方法,算不算主线程内的可重入函数呢?
procedure TForm1.OnTimer()
var
xxx:xxx;
begin
...
...
Application.ProcessMessage();
end;
cpu从内存中加载代码执行,即使多线程也不用担心,因为代码区是静态只读的,大家都在读,不存在同步问题。
局部变量在各自线程的栈中,不用担心线程同步问题。