Blue
Red
Green
Orange
Voilet
Slate
Dark

队列(TQUEUE)只能在局部内使用吗?详细见内(100分)

C

chriszx

Unregistered / Unconfirmed
GUEST, unregistred user!
队列好像只能在局部内使用?一个全局队列,比如在test1过程/函数中进队,在test2过程
/函数中出队。它的值就变了,变成了乱码!而在test3中进队/出队就可以,没什么问题。
但这样做就没有意义了!不知道各位有没有遇到过?又没有解决的方法?
 
L

Lyte Zeng

Unregistered / Unconfirmed
GUEST, unregistred user!
源码贴出来看看
 
C

chriszx

Unregistered / Unconfirmed
GUEST, unregistred user!
var
pReceStr: ^string;
begin
New(pReceStr);
try
pReceStr^ := S;
ReceStrQueue.Push(pReceStr)
//ReceStrQueue 是个全局队列
//本想在这里发个消息让程序做下面的三行代码
pReceStr := ReceStrQueue.Pop;
if Decode(pReceStr^) <> '' then
Disassemble(pReceStr^,IP);
finally
Dispose(pReceStr);
end;
end;

这样做是行的,但没有任何意义!但队列ReceStrQueue在其他的一个过程或函数里出队,
他的值就变了!
 
C

chriszx

Unregistered / Unconfirmed
GUEST, unregistred user!
没人答啊?
提前!
 
C

chenxihua

Unregistered / Unconfirmed
GUEST, unregistred user!
你的pReceStr 最后都Dispose了, 得到消息并处理队列中的数据时, 很有可能那块内存已经被释放掉了
 
Z

zjan521

Unregistered / Unconfirmed
GUEST, unregistred user!
如果多线程,那么需要处理互斥,否则出错肯定是你的代码问题
 
Z

zhliangming

Unregistered / Unconfirmed
GUEST, unregistred user!
同意chenxihua的观点。
应该在你pop出来使用完之后才调用Dispose的。
 
G

gzbxmcx

Unregistered / Unconfirmed
GUEST, unregistred user!
chenxihua说有没错。
 
S

sofox

Unregistered / Unconfirmed
GUEST, unregistred user!
chriszx: 概念性错误, ^string只是个指针
应该这样写:
var
p: pchar;
begin
GetMem(p, length(s));
move(pchar(s)^, p^, length(s));
ReceStrQueue.Push(p)

end;
 
顶部 底部