两个线程A和B,希望当A忙时,B停;当A停时,B运行. (100分)

  • 主题发起人 主题发起人 Liyue
  • 开始时间 开始时间
L

Liyue

Unregistered / Unconfirmed
GUEST, unregistred user!
两个线程:
线程A:游戏主程序;
线程B:装载游戏A运行时需要的音频图片等.
为了提高程序运行速度和平滑程度,希望实现以下功能:
当线程A运行时,线程B自动停止;当线程A停时,线程B自动开始运行.
也就是说,当线程A需要时,100%Cup资源为A服务;
当线程A不需要时,100%Cup资源为B服务.
怎样实现?谢谢!!
 
临界区
var
Sect: TRTLCriticalSection;
// 线程 1 或 2
EnterCriticalSection(Sect)
// 你的代码
LeaveCriticalSection(Sect)
 
刚才写了一堆,结果出错,没发出去,现在没时间了,简单说了.
用TEvent,看看关于操作系统的理论
 
建议你看《delphi5 开发人员指南》,线程同步。
 
在A中的线层的EXECUTE写法:
B。SUSPEND
EXECUTE CODES
B。RESUME
 
关键在于两个线程的同步问题
用Event应该就可以很好解决了
 
使B的优先级低于A即可。
 
用线程同步是最好的了,,我给你一个框架吧 :)
1、你先要在创建任何线程前定义并创建一个全局的互斥对象:
var
hMutex:THandle;
在程序的初始化部分创建该对象(在FormCreate或Initialization里都可以)
hMutex:=CreateMutex(nil,false,nil);
2、然后在你的线程体中将你需要保护的地方使用如下代码:
if WaitForSingleObject(hMutex,INFINITE)=WAIT_OBJECT_0 then
begin
//在此处添加你的代码
end;
//释放互斥对象,使其为发信号状态
ReleaseMutex(hMutex);
3、注意,别忘了在你的应用程序终止前用CloseHandle(hMutex)来删除该互斥对象,不然它将
在系统中一直存在(它是系统全局的对象);
 
没有吧,我觉得还是用同步好为什么要用互斥呀,
互斥又费时间
 
多人接受答案了。
 
后退
顶部