我想做一个这样的东西。
一个程序是多线程的,接收很多的信息,当接受到一个信息的时候我设置一个互斥量,防止别人使用资源,当我处理完成以后,我是否这个互斥量,让以前的信息继续处理。
我是这样写的!!
//定义
MYRecord=record
.....
tMutex:hwnd; {定义一个互斥量}
//初始化
...
MYRecord.tMutex:=0;
//创建一个互斥量
MYRecord.tMutex:=CreateMutex(nil,False,'Mutex');
//等待
WaitForSingleObject(MYRecord.tMutex,5000);//解除互斥
ReleaseMutex(MYRecord.tMutex);现在的问题是,当我等待的时候,根本就不能等待,是直接执行的。(5000根本就不起作用)。这是为什么呢??
一个程序是多线程的,接收很多的信息,当接受到一个信息的时候我设置一个互斥量,防止别人使用资源,当我处理完成以后,我是否这个互斥量,让以前的信息继续处理。
我是这样写的!!
//定义
MYRecord=record
.....
tMutex:hwnd; {定义一个互斥量}
//初始化
...
MYRecord.tMutex:=0;
//创建一个互斥量
MYRecord.tMutex:=CreateMutex(nil,False,'Mutex');
//等待
WaitForSingleObject(MYRecord.tMutex,5000);//解除互斥
ReleaseMutex(MYRecord.tMutex);现在的问题是,当我等待的时候,根本就不能等待,是直接执行的。(5000根本就不起作用)。这是为什么呢??
解决方案 »
- 帮我解读一下这小段程序
- 怎样将第一个Frm_login中的值(在Frm_login中通过Query取道的)传到第二个Frm_mian中!
- TChart中bottomAxis问题
- 有谁能告诉我StringGrid的用法!希望能具体一点!
- Format('%*.*n',[10,2,n])什么含义?
- 用FASTREPORT,怎样把报表内容导出到EXCEL中?
- QuantumGrid 4.1 TcxTextEdit之 bug,不知道兄弟们有没有遇到过
- 关于文件读操作的疑问..UP有分
- DsgnIntf文件怎么使用?
- 如何将一个32位的无符号整型数按高16位和低16位拆成两个16位的整型数?
- 如何移动鼠标到指定的点
- 关于用DLL传递动态数据组的问题;
2. 其实你的问题是这样的....你这个MYRecord.tMutex 有谁还用到么??没人用到自然就是它自己的了
主线程 CreateMutext....
其他线程WaitForSingleObject ... OpenMutext......RealseMetext...
function ReadThread(lpPointer: Pointer):DWORD;
var
dwWait: DWORD;
begin
Result := 0;
dwWait := WaitForSingleObject(hMutex, INFINITE);
if dwWait = WAIT_OBJECT_0 then
begin
ShowMessage(Form1.Edit1.Text);
ReleaseMutex(hMutex);
end;
end;function WriteThread(lpPointer: Pointer):DWORD;
begin
Result := 0;
WaitForSingleObject(hMutex, INFINITE);
Form1.Edit1.Text := 'write';
Sleep(1000); // the reason for Sleep is:
// WM_PAINT 优先级最低
// 你可以屏蔽此句试试
ReleaseMutex(hMutex);
end;procedure TForm1.Button2Click(Sender: TObject);
var
dwWrite,dwRead:DWORD;
begin
hMutex := CreateMutex(nil, False, 'No1');
CreateThread(nil, 0, @WriteThread, nil, 0, dwWrite);
CreateThread(nil, 0, @ReadThread, nil, 0, dwWrite);
end;