Blue
Red
Green
Orange
Voilet
Slate
Dark

多线程,共享结构数组问题!在线等待...高分相送(100分)

L

LiChaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
20是缓冲区的个数,你的一个结构算是一个缓冲区
用数组也可以,写入时,扫描数组,根据空闲标志,找空闲位置,写入完成后,
标记为可用
读取时,也进行扫描,找有效的元素,读取完成后,标为空闲
其他的不变就可以
如果缓冲区的数据由主线成来加入,考虑使用较大的缓冲区,
否则可能会阻塞主线程,造成程序假死
一般情况下用不着WaitForMultipleObjects这个API函数的,
说说你有没有可能用到这个函数
我想,我上面的那个单元,加上TCriticalSection就足够用了
 
S

syy_sxd

Unregistered / Unconfirmed
GUEST, unregistred user!
WaitForMultipleObjects这个函数我也不太知道什么意思
我想它是不是用来多个线程,协调工作的,因为我还有发送线程,处理线程等等
请指教!
 
L

LiChaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
可能是,一个线程在等待多个信号量或互斥量同时空闲,或激活
可能会用在一个线程需要和其他多于一个线程进行同步才有用
对于两个线程之间的事情是用不着的
 
S

syy_sxd

Unregistered / Unconfirmed
GUEST, unregistred user!
to LiChaoHui
Semaphore1 := TSemaphore.Create('buffer_semaphore_01', 20, 20);
Semaphore2 := TSemaphore.Create('buffer_semaphore_01', 0, 20);
1。我是用结构型数组来做处理收发数据,数组大小我设为10,缓冲设多大?
我也结构的大小是266字节,10个,那应该是256*10字节吗
Semaphore1 := TSemaphore.Create('buffer_semaphore_01', 10,2660);
Semaphore2 := TSemaphore.Create('buffer_semaphore_01', 0, 2660);
可以吗?另外:'buffer_semaphore_01'这个名字,怎么和我的结构型数组联系呢?
 
L

LiChaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
对不起,是我的笔误,两个信号量的名字是不能相同的,否则就是同一个了
我关于此类问题写了一个例子程序,关于线程的同步与互斥
是针对http://www.delphibbs.com/delphibbs/DispQ.asp?LID=1663196
的问题写出来的,主要是方法和思路的问题,如果理解了
写出你的程序是不成问题的
http://www.playicq.com/dispdocnew.php?id=3624
可能对刚开始学习线程同步与互斥的人大有帮助
同时提供了一个Windows同步对象的单元,演示了队列,栈,动态数组的使用
需要源代码的,请留下 eMail
 
S

syy_sxd

Unregistered / Unconfirmed
GUEST, unregistred user!
真的很感谢,sxd78@163.com
 
L

LiChaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
自己下载去吧,真懒
 
S

syy_sxd

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
514
import
I
I
回复
0
查看
525
import
I
顶部 底部