全部博文(788)
分类:
2008-11-27 21:17:38
procedure TReadDataThread.Execute;
begin
{ Place thread code here }
Synchronize(A);
end;
-------->看看你执行了什么?线程的执行体就是把事件抛给主线程来处理?!
你重新编写线程类代码,这里写的有点乱乱的.
TThread类线程释放的时候调用Terminate过程结束线程。Terminate过程只是简单地设
置线程类的Terminated标志,让Execute方法执行完毕,然后Destroy。
Synchronize(A);
不会执行到dll里面的A过程,因为Synchronize是给主线程来处理,也就是dll的属主程序。
谢谢xjjrocker(了无痕)和Dlwxn(Dlwxn)
我想问一下,那能否在dll函数里创建线程,再由dll函数释放呢?应该怎么写呢?谢谢各位了。
如果不考虑与主进程同步Synchronize。
dll里面的线程和主程序里面的线程一样的写法。
在线程的执行或者创建时候,FreeOnTerminate := True;,这样当线程终止时候,线程事例就会自动销毁。
如果手动干预线程终止,就不能 FreeOnTerminate := True.
这些前提是dll静态调用,或者dll动态调用不马上是否dll句柄。否则线程没有执行完毕,dll就被你释放了。
这些前提是dll静态调用,或者dll动态调用不马上释放dll句柄。否则线程没有执行完毕,dll就被你释放了。
我的想法应该这样啊:
主程序调用dll的Read函数,进入Read函数,在Read函数里建立线程,这个线程是用来读数据的,是用条件循环的方式,条件成立就退出循环,释放线程,再返回到Read函数里建立线程的下一条语句继续执行,通过线程里读到的数据进行下一步的处理。直到Read函数退出。那我的调用dll函数的主程序再通过Read函数的返回值作处理。
这样主程序在调用Read函数时,就不至于由于Read里的循环而导致主调无法移动等窗口操作
就这样一个过程。
希望各位大侠帮忙!!!谢谢
再返回到Read函数里建立线程的下一条语句继续执行
---------------------你这是同步吧。要线程有什么用?
DLL中函数A创建线程,传入系统主窗体的HANDLE,执行操作,完成后给主窗体发送消息B
主程序调用A。
主程序处理消息B
用线程就是异步的。