多线程的问题(50分)

  • 主题发起人 主题发起人 aking
  • 开始时间 开始时间
A

aking

Unregistered / Unconfirmed
GUEST, unregistred user!
我在主程序中产生一个线程,当线程结束时我想让该线程改写在主程序内定义的一个变量的值,该如何做.
 
若主线程此时不访问这个变量,对其直接赋值
否则可采用发消息等方法实现
 
如何通过发消息的方式来实现,因为我同时还有一个线程要访问这个变量
 
修改前对该变量加一个锁标志,修改后解除该锁标志。
其他的线程访问该变量时,如果有锁就等待,无锁就读写。
 
是怎么个改写?
如果是赋值(与原来的值无关,不是加减)就直接写进去得了,不用锁定
如果是在原来的值的基础上计算新值(比如加减),需要锁定,如果是加减法
InterlockedCompareExchange
InterlockedDecrement
InterlockedExchange
InterlockedExchangeAdd
InterlockedIncrement
 
see the backgroud query demo
../demos/db/bkquery
 
我喜欢用Mutex:
先把要操作的变量定义为公有变量,然后再定一个Mutex变量:
i:Integer;
//假设这是要操作的变量
MyMutex:THandle;
是主窗口建立时初始化:
MyMutex:=CreateMutex(nil,false,nil);
在每一个要操作这个变量单元的implcation部分加上Uses语句:
Uses Main;
//假设你的主程序文件名为Main.pas
改写时(每一个要必定的地方都这样):
WaitforSingluObject(MyMutex,INFINITE);
//等待获得操作权
.... //改写操作
ReleaseMutex(MyMutex);
 
多人接受答案了。
 
后退
顶部