我做了一个多线程程序,有三个线程
用了CreateMutex同步,
分别在工程单元中:
program Gateway;uses
Forms,Windows,
Main in 'Main.pas' {MainFrm},
dlltype in 'dlltype.pas',
addrList in 'addrList.pas' {AList};{$R *.res}begin hMutex := CreateMutex( nil, FALSE, nil );
OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'MyMutex');
Application.Initialize;
Application.CreateForm(TMainFrm, MainFrm);
Application.CreateForm(TAList, AList);
Application.Run;
CloseHandle( hMutex );
end;然后在各个线程单元用:
..............................
WaitForSingleObject(hMutex, INFINITE);
......................
ReleaseMutex(hMutex);
可是程序执行到一般总是有一个线程会死锁,我查了好久,都不知道什么原因,请问各位高手,
我的程序问题出在哪里?
用了CreateMutex同步,
分别在工程单元中:
program Gateway;uses
Forms,Windows,
Main in 'Main.pas' {MainFrm},
dlltype in 'dlltype.pas',
addrList in 'addrList.pas' {AList};{$R *.res}begin hMutex := CreateMutex( nil, FALSE, nil );
OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'MyMutex');
Application.Initialize;
Application.CreateForm(TMainFrm, MainFrm);
Application.CreateForm(TAList, AList);
Application.Run;
CloseHandle( hMutex );
end;然后在各个线程单元用:
..............................
WaitForSingleObject(hMutex, INFINITE);
......................
ReleaseMutex(hMutex);
可是程序执行到一般总是有一个线程会死锁,我查了好久,都不知道什么原因,请问各位高手,
我的程序问题出在哪里?
begin hMutex := CreateMutex( nil, FALSE, nil );
OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'MyMutex');
Application.Initialize;
Application.CreateForm(TMainFrm, MainFrm);
Application.CreateForm(TAList, AList);
Application.Run;
CloseHandle( hMutex );// the main thread create the mutex and it imdiately own the mutex
ReleaseMutex(hMutex);
end;
ReleaseMutex(hMutex);
Application.Initialize;
Application.CreateForm(TMainFrm, MainFrm);
Application.CreateForm(TAList, AList);
Application.Run;
CloseHandle( hMutex );
end;
//OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'MyMutex');
Application.Initialize;
Application.CreateForm(TMainFrm, MainFrm);
Application.CreateForm(TAList, AList);
Application.Run;
CloseHandle( hMutex );
end;
然后在各个线程单元用:
OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'MyMutex');
..............................
WaitForSingleObject(hMutex, INFINITE);
......................
ReleaseMutex(hMutex);