文件读写同步问题 找进销存软件破解版
c:\a.txt
有两个线程同时对它操作。
一个在往里写(调其他程序)。另外一个等前面的线程写完后去读。
如何能够知道前面的写完了?时间因为写的内容不同写的时间从几秒到几十秒不等。
如何知道已经写完马上读?
用文件流 ms:tfilestream 监视可以吗?
我用 ms.Create(''c:\a.txt'',fmOpenWrite ) ;当a.txt变化时ms会变化吗?
现在是用sleep(60000);可是有时候一秒不到就写完了。白白多等了59秒。有没有API函数
能够马上得知a.txt的变化?问题解决再加300分
2楼: {在写文件进程中,如果完成操作,那么触发读文件进程的读文件的事件;
就像TEdit 的内容变化后会触发其OnChange 属性中设置的事件一样!}
unit ClassThreads;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;
type
TReadThread = class (TThread)//读进程,里面有个读文件的事件
public
procedure Read(Sender : TObject);
end;
TWriteThread = class (TThread)//写进程,有写事件
private
FReadEvent: TNotifyEvent;
public
constructor Create(CreateSuspended: Boolean; AReadEvent : TNotifyEvent); reintroduce; overload;
property ReadEvent : TNotifyEvent read FReadEvent write FReadEvent;//读文件的事件属性,初始化的时候,或者其它时候可以给该属性赋值
procedure Write(Sender : TObject);
end;
procedure Run;
implementation
procedure Run;
// 使用范例
var
r : TReadThread;
w : TWriteThread;
begin
r := TReadThread.Create(True);
w := TWriteThread.Create(True, r.Read);
//...........
end;
{ TReadThread }
procedure TReadThread.Read(Sender: TObject);
begin
//
end;
{ TWriteThread }
constructor TWriteThread.Create(CreateSuspended: Boolean; AReadEvent : TNotifyEvent);
begin
inherited Create(CreateSuspended);
if Assigned(AReadEvent) then
ReadEvent := AReadEvent;
end;
procedure TWriteThread.Write(Sender: TObject);
begin
//处理写文件..............
//写文件完毕后,触发读事件
if Assigned(ReadEvent) then
ReadEvent(nil);
end;
end. 如进销存软件破解版
3楼: To royal1442
[:D]难就难在写不在本进程中。是线程通过消息通知另外一个进程(另外的程序写。并且不是我的程序不能发消息通知我。只知道他收到消息后会马上写a.txt文件。也不知道他什么时间写完)。同一进程中用你的代码很容易实现。谢谢了。不同进程是不是监视a.txt文件?好像很有难度啊。
[red]有没有朋友知道?[/red]
4楼: 那就不好办了,除非它可以通过任意一种方式来通知你!
5楼: 可以使用互斥。典型的进程同步问题
6楼: 进程间的同步只能用互斥量
CreateMutex
OpenMutex
WaitForSingleObject
CloseHandle
ReleaseMutex
就这几个函数
财务软件版7楼: 比较两次读的同不同,不知中不中?或是文件属性中的各种时间(最后一次修改之类的)
8楼: 多人接受答案了。