会线程的大哥们.帮帮忙啦! ( 积分: 100 )

  • 主题发起人 主题发起人 shameboy
  • 开始时间 开始时间
S

shameboy

Unregistered / Unconfirmed
GUEST, unregistred user!
最近我在做一多线程操作串口的系统.我分两个线程HThreadA和HThreadB
工作的时候HThreadB优先级要高于HThreadA.
程序启动我创了一个事件EventA := CreateEvent(nil, True, False, 'MyEvent');
HThreadA先运行
function ThreadA_SendForRead(p: pointer): Longint;
stdcall;
var
ObjRtn: Integer;
begin
Application.ProcessMessages;
sleep(100);
SetEvent(EventA);
ObjRtn := WaitForSingleObject(EventA, 10000);
while truedo
begin
SendData(AllDevice_CommandList[Server_Form.Tag]);
Server_Form.Tag := Server_Form.Tag + 1;
ObjRtn := WaitForSingleObject(EventA, 10000);
sleep(1);
end;
end;
HThreadB后运行,但优先级更高
function ThreadA_WriterData(p: pointer): Longint;
stdcall;
begin
Application.ProcessMessages;
sleep(100);
ResetEvent(EventA);
while aaado
...........
setEvent(EventA);
我是这样做线程同异步的.但是发现有时线程A发生死锁.谁有更好的办法,出出点子.
 
线程里面访问Application做什么?多此一举啊。而且Application不是线程安全的。
 
用delphi的TEvent类创建事件对象, CreateEvent好象有问题!我曾经用 CreateEvent创建事件,但发现有时得不到通知,改为delphi自带的TEvent类就好了!
EventA:=TEvent.Create(nil,False,False,'MyEvent');
然后:
EventA.WaitFor(INFINITE);
...
 
好,谢谢你,我试一下
 
好,谢谢你,我试一下
 
我试过了,问题还是有啊.不过.是比以前我那方法出错的概率小一些了/.怎么办啊?
 
发现问题是这样的啦.结果不是线程A死锁.而是线程A直接退出.我用任务管理器查看线程数,后发现线程A没工作原来是线程A退出了.谁比较了解Event?
 
你看看是不是线程a在哪儿产生了异常,致使它退出了
 
不是线程退出, 是我一个变量没设置好.
新问题了.我用了gogogo2003,的TEvent事件又发现新问题出现了.这个EventA.resetevent/EventA.setevent....我频每繁建这个线程和结束线程.结果会发生内存什么问题,问题结果指在application.run.那边;请gogogo2003有上线加我QQ 358117253
 
我现在需要的就是控制线程A.有线程B要运行,线程A就暂停,B运行完且退出前告诉A继续运行.我不要用supend.
...resume./..这些方法不实际.Event控制我就是出现内存报错那个问题.谁哪位有更稳定的控制方法麻烦告诉我下好不?实在想得焦头烂额了,谢谢路过的大侠们给个点子?我的QQ号就是上面那个,敬请加我.
 
后退
顶部