现在做多线程需要这样,比如有100个线程,每个执行完计数器就加1但是就像操作系统中的信号量一样,对这个计数器同时只能有一个线程在使用如果计数器被占着了,其他的 线程就要等待现在我已经会这样,就是比如有5个线程,用WaitForMultipleObjects可以5个全部结束时执行某个操作
但是如何能每个一执行完就加1,且要独占~~~
谁能给个解决方案或例子!!!!谢谢了!!!!!!!!!!!
但是如何能每个一执行完就加1,且要独占~~~
谁能给个解决方案或例子!!!!谢谢了!!!!!!!!!!!
解决方案 »
- 求教去重复的正则
- 求tdxdbgrid--->tdxdbgridcheckcolumn 的使用方法和代码.
- 类型抽象的问题...麻烦指点下,卡壳了....-_-!
- 请问QReport用A4纸设置的时候怎么使纸张横着放。在线急等!
- 窗体问题
- 不知道Delphi有不有这个功能?
- 在Delphi中怎样调用GOOGLE的API搜索歌曲并且使程序得到搜索歌曲的URL
- 1。用TFileStream删除一个文件该如何做? 2。TListItems的insert方法如何用呀?
- 请教一个问题。急
- 我在安装DELPHI的flatstyle控件时总是出现这样的错误:[Fatal Error] FlatStyle_D5.dpk(54): Internal error: URW3010,不是知道是什么原因,我试过好多次了,都是一样的,请帮我解答一下,谢谢!
- 在Delphi中如何控制 某台打印机的进退纸. 各位龙虾路过进来看看,100大洋不是很多.但却是小弟的一翻心意.
- 初学者面对的一个有高难度的大问题,高手进来留个言啊
.......interface
uses SyncObjs,......;type
{安全计数器}
TSecurityCounter=class
private
//计数器
FCounter: LongWord;
//计数器锁
FLock: TCriticalSection;
public
//创建
constructor Create;
//注销
destructor Destroy; override;
//计数器加一
procedure ScInc;
//计数器值
property CounterValue:LongWord read FCounter;
end;
.............implementationconstructor TSecurityCounter.Create;
begin
FLock:=TCriticalSection.Create;
FCounter:=0;
end;
destructor TSecurityCounter.Destroy;
begin
FLock.Free;
end;
procedure TSecurityCounter.ScInc;
begin
FLock.Enter;
Inc(FCounter);
FLock.Leave;
end;
Execute里的语句是 WaitForMultipleObjects(Count, @ThreadHandle, True, INFINITE);如何改
dwWaitRet:DWORD;
iCount:Integer;..
iCount := Count
while true do
begin
dwWaitRet := WaitForMultipleObject(Count(*64 is maximum*),@ThreadHadles,False,INFINITE);
if dwWaitRet = $0FFFFFFFF then
begin
//Error:Is Failed
Exit;
end;
if dwWaitRet = WAIT_TIMEOUT then
begin
//Error:Time Out
Continue;
end;
if (dwWaitRet>=WAIT_OBJECT_0) and (dwWaitRet <WAIT_ABANDONED_0) then
begin
Inc(CompletedCount);
Dec(iCount);
if iCount = 0 then
break;
continue;
end;
end;
SyncObjsCS: TCriticalSection;cs.enter;
...
需锁定的原子操作
...
cs.leave;
可参考刘艺 <面向对象编程思想>