如何在DLL中创建一个线程?急,如果大家嫌分少,可直接跟我说,只要能解决问题(100分)

  • 主题发起人 主题发起人 天真
  • 开始时间 开始时间

天真

Unregistered / Unconfirmed
GUEST, unregistred user!
现在我要写个DLL,在这个DLL中有一个线程,无时无刻不在监听某个端口,现在让我烦心的是
如何创建一个线程???最好这个线程还能访问PROJECT。DPR中的变量,谢谢了
 
用API函数createthread
 
创建线程还可以,但是线程访问dpr调用文件的变量就比较难了。
给你一个思路。
将所有的主函数的变量(需要动态库访问的)封装在一个结构里面,然后将结构的指针传递给动态库。
这样动态库就能够访问了。
其实就是在主程序里面和动态库中都uses相同的一个pas,里面定义了一个结构,如果是VC调用,那么转换成VC相应的结构就OK了。
其实在动态库中创建线程,我没有做过,不过按道理应该和在exe中一样。
 
YZHSHI,怎么创建呢?
我总得要有个函数用来创建线程的呀
而不是说,一导入DLL就创建线程了呀:)
 
噢,这个看你的具体需求了。
你需要什么时候使用多线程,就什么时候建立。
注意:动态库可以有多个对外,你可以调用接口1来连接设备,接口2来创建多线程……
 
这个是当然,但是创建该线程的函数写在哪??
DPR文件中???好象不行:(
 
肯定不能在dpr中,在动态库中呀。
 
对呀,我是说那段创建线程的代码该写在哪个地方??
 
卸载你的一个调用函数中

procedure create_thread;stdcall
begin
//创建多线程
end;

exports create_thread。
如上不可以吗?
 
呵,好象可以了,其实我关键的地方,就是怎么样生成线程?
我用
TLISTDATATHREAD.CREATE()
不行,所以我就问了:)
API用得少
 
这个我也说不清楚了,本来我对线程就很不感冒。
我的问题是:
1、对于动态库中的线程和可执行文件中的线程有区别吗?
2、如果没有区别,你不妨首先在可执行文件里面弄出一个骨架,然后移植。
能给你的建议就这些了,我已经捉襟见肘了(呵呵,可不是热的呀)
 
YZHSHI呀,有区别的,:(
 
那就使用API吧,这个肯定没有区别。
关键是你的动态库做什么?
具体可以参考Delphi的Thread类,注意里面的Synchronize的实现。
这个肯定相同,呵呵。
不过要注意,在线程里面尽量做最少的工作。
 
TLISTDATATHREAD.CREATE()
是DELPHI编译通不过的呀
 
YZHSHI,晕倒,可以通过的:(
 
编译不过?
出什么错?是不是你少uses了什么?
 
多人接受答案了。
 
呓?别结束呀,我要告诉你的是:
我刚才实验了,可以正常在Dll里面使用线程!
确实可以,我将Delphi自带的线程例子拿到DLL中了,编译已经通过,只是没有调用执行而已的呀。
 
后退
顶部