朋友们有空的话帮我看两个小问题。我现在在镇上的网吧,时间不多。是关于内联函数与内存释放的

gnhao 2008-06-01 08:23:24
内联函数
code.h
#ifndef DLL_API
#define DLL_API _declspec(dllimport)
#endif

class DLL_API test
{
inline void t()
{
//do......
}
}

code.cpp

#define DLL_API _declspec(dllexport)
#include "code.h"

在code.h定义内联函数编译时有无法找到符号错误!

1我写一个DLL。但是在头文件中不能加内联啊?有什么办法?


另外。我要在一个线程中调用一个类的实例方法
所以我定义了一个结构
typedef struct
{
test*test_obj;//传指针过去
HANDLE completion_port;//完成端口句柄
}WORK_THREAD_PARAM,*LPWORK_THREAD_PARAM;
然后在test类的一个方法中

LPWORK_THREAD_PARAM workThreadParam=new WORK_THREAD_PARAM();//这里的内存在线程中如何释放?不能不能new啊。这个方法退出后线程才开始。如果不new刚线程无法得到值。但在线程中不能delete 。因为会让test * test_obj为空。但在线程中那个NEW出来的东西用不着了啊。!
workThreadParam->completion_port=hCompletionPort;
workThreadParam->>test_obj=this;

DWORD WINAPI test::WorkThread(LPVOID lpParameter)
{
LPWORK_THREAD_PARAM workParam=(LPWORK_THREAD_PARAM)lpParameter;
HANDLE hCompletion=workParam->completion_port;
test*test_obj;=workParam->test_obj;
//下边就可以调用了。但如果delete的话刚不行
test_obj->(实例方法)

}
问题一:如何在dll项目中定义内联函数
问题二:怎样释放那个new出来的内存啊?




...全文
144 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangk 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 unsigned 的回复:]
我挖
[/Quote]

被雷倒了。现在楼主的镇都升级成直辖市了。
  • 打赏
  • 举报
回复
我合计csdn的计时系统坏了呢!
jameshooo 2009-05-13
  • 打赏
  • 举报
回复
服了
greatws 2009-05-13
  • 打赏
  • 举报
回复
僵哥真能挖,1年前的贴
僵哥 2009-05-13
  • 打赏
  • 举报
回复
我挖
僵哥 2008-06-01
  • 打赏
  • 举报
回复
问题1:参考http://msdn.microsoft.com/zh-cn/library/feffc7b5(VS.80).aspx

问题2:使用引用计数(引用计数采用原子操作,如InterlockedIncrement/InterlockedDecrement等处理)
A线程new data; //data引用计数为1
对data增加引用计数 //data引用计数为2
放到B线程可以取到的存储区 //data引用计数为2
A线程释放data一个引用计数 //data引用计数为1

B线程取得data //data引用计数为1或者2(如果在A释放之前),其中有一个引用计数是A交给B管理的,所以无论何时至少有一个引用计数
B线程处理data //data引用计数为1(假设)
B线程释放data一个引用计数 //data引用计数为0(假设),回收

gnhao 2008-06-01
  • 打赏
  • 举报
回复
哎。看来只有如此了。时间不多下次结贴
wltg2001 2008-06-01
  • 打赏
  • 举报
回复
第一个问题不清楚,第二个问题,在给线程传参数时可以传送全局变量,在线程中用临时变量保存
gnhao 2008-06-01
  • 打赏
  • 举报
回复
楼上朋友。我试了。test_obj为 空
kingstarer 2008-06-01
  • 打赏
  • 举报
回复
但在线程中不能delete 。因为会让test * test_obj为空

为何? 你自己写了对delete重载的代码? 不然不会调用delete test_obj;的

dll没用过 不过好像类里面定义的函数,不加声明,则默认是inline的
code-artist 2008-06-01
  • 打赏
  • 举报
回复
楼主我认识你
code-artist 2008-06-01
  • 打赏
  • 举报
回复
这就是RP啊~
cnzdgs 2008-06-01
  • 打赏
  • 举报
回复
1、我用VC6和2005都没问题,编译结果是在模块内部使用内联,对外导出函数。
2、new一个结构传给线程,在线程内delete,这是非常常见的做法,有何不行?

18,355

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧