应用多线程应注意哪些问题?(100分)

Z

zhjwjan

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个线程类,它不知道自己执行的代码是什么,线程类定义如下:
TExecuteBody = procedure(param1, param2, param3, ...) of object;
TMyThread = class(TThread)
private
FExecuteBody: TExecuteBody;
protected
procedure Execute;
override;
public
property ExecuteBody: TExecuteBody read FExecuteBody write FExecuteBody;
end;

procedure TMyThread.Execute;
begin
if Assigned(FExecuteBody) then
FExecuteBody(param1, param2, param3, ...);
end;

我可以在任意地方创建这个类的实例,为它指定执行内容,然后让线程运行。这样的话,我必须
在要执行的过程里注意好线程访问问题,我不想用synchronize,请问我应该注意哪些问题?
如果说我把某个类的一个方法赋给ExecuteBody,那么这个类里面能不能访问该类的成员和方法?
如果在这些方法中使用到临届区变量,这些变量是否应该是全局呢?这只是我想到的一些问题,
其它注意事项请大家赐教。谢谢!
 
使用互斥或阻塞都可以,到论坛查一下吧,以前有人问过
 
这个线程类本身没有问题,但调用者就要注意了,因为必须调用线程安全的代码.
只要是线程安全的,不管是不是类的成员或方法都没有问题
但你多个线程同时访问一个资源的时候,就要考虑线程间的同步问题了.
建议你找一些线程的书看看,如候捷翻译的那本
 
请问候捷翻译那本书叫什么名字?谢谢!
 
访问VCL控件类的方法或属性是可能会遇到问题,存在安全隐患。
对全局变量或临界资源的访问要用到同步或互斥
 
win32多线程编程,市面上都是卖的
 
如果涉及到一些界面方面,可以直接用sendmessage发送对应的消息,用
消息队列同步。
 
我以前说过了,你自己查吧!我这儿就只告诉你一个方法了!
使用api:
初始化临界变量 InitializeCriticalSection()
设置临界区SelectCriticalSection()
处理自己的事务……
离开临界区leaveCriticalSection()
 
不满意的答案。
 
顶部