关于多线程访问资源的问题? 比如对一个字符串,有两个线程分别对它进行删除和增加新的字符,请问有什么好的方法能够保证安全? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; CriticalSection: TRTLCriticalSection; {临界区信息}implementation{$R *.DFM}function ThreadFunc(Info: Pointer): Integer; stdcall;var Count: Integer;begin EnterCriticalSection(CriticalSection); Form1.Button1.Enabled:=False; for Count := 0 to 10000 do begin Form1.Edit1.Text := IntToStr(Count); Application.ProcessMessages; end; Form1.Edit1.Text := '线程结束!'; Form1.Memo1.Lines.Add('线程结束!'); Sleep(500); Form1.Button1.Enabled:=true; LeaveCriticalSection(CriticalSection); ExitThread(4);end;procedure TForm1.Button1Click(Sender: TObject);var ThreadId1, ThreadId2: DWORD;begin Button1.Enabled:=false; if CriticalSection.RecursionCount<>0 then DeleteCriticalSection(CriticalSection); InitializeCriticalSection(CriticalSection); Memo1.Lines.Add('创建线程1.'); CreateThread(nil, 0, @ThreadFunc, nil, 0, ThreadId1); Memo1.Lines.Add('创建线程2.'); CreateThread(nil, 0, @ThreadFunc, nil, 0, ThreadId2);end;end. 请教DELPHI随即数的问题 Function函数使用Perform出错? 利用ADO将EXCEL批量导入至ACCESS中源码 编译没错 执行程序 什么反映都没有 急 那个地方错了 滚动文字显示闪烁如何消除? image问题 君卿本无意,来者犹可知,散分 急问!!请大家指点一下! 请大虾们帮忙! 问用DELPHI怎么做文字从下向上平滑滚动,有控件也可以? 关于TBlobStream.write,谁能帮我看一看 征Delphi程序员一名(SO/HO,非全职,sideline) 怎样判断鼠标离开窗体?
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations } end;var
Form1: TForm1;
CriticalSection: TRTLCriticalSection; {临界区信息}implementation{$R *.DFM}function ThreadFunc(Info: Pointer): Integer; stdcall;
var
Count: Integer;
begin
EnterCriticalSection(CriticalSection);
Form1.Button1.Enabled:=False;
for Count := 0 to 10000 do
begin
Form1.Edit1.Text := IntToStr(Count);
Application.ProcessMessages;
end;
Form1.Edit1.Text := '线程结束!';
Form1.Memo1.Lines.Add('线程结束!');
Sleep(500);
Form1.Button1.Enabled:=true;
LeaveCriticalSection(CriticalSection);
ExitThread(4);
end;procedure TForm1.Button1Click(Sender: TObject);
var
ThreadId1, ThreadId2: DWORD;
begin
Button1.Enabled:=false;
if CriticalSection.RecursionCount<>0 then
DeleteCriticalSection(CriticalSection);
InitializeCriticalSection(CriticalSection);
Memo1.Lines.Add('创建线程1.');
CreateThread(nil, 0, @ThreadFunc, nil, 0, ThreadId1);
Memo1.Lines.Add('创建线程2.');
CreateThread(nil, 0, @ThreadFunc, nil, 0, ThreadId2);
end;end.