社区
进程/线程/DLL
帖子详情
线程中调用全局函数失败,为什么?
qqxia
2003-08-12 10:12:55
有一个全局函数是取数据的。本来是使用定时器操作的,现在改为使用线程,但是改为线程以后调用全局函数就失败了。无法取到数据。
...全文
53
9
打赏
收藏
线程中调用全局函数失败,为什么?
有一个全局函数是取数据的。本来是使用定时器操作的,现在改为使用线程,但是改为线程以后调用全局函数就失败了。无法取到数据。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qqxia
2003-08-12
打赏
举报
回复
在定时器中调用这个函数是正确的
现在是DdeCreateStringHandle建立的对话句柄是空的,即使将这些句柄提前建立,保存在数组中,再调用DdeClientTransaction函数也不能正确执行!!!
qqxia
2003-08-12
打赏
举报
回复
原来是在定时器中使用DdeClientTransaction函数取得数据;
在取数据之前使用DdeCreateStringHandle建立对话句柄。函数体如下:
HSZ tagHsz;
if(lpItem[nIndex] !=NULL)
{
CString strShow = lpItem[nIndex];
MessageBox(NULL,strShow,"Msg",MB_OK);
}
if(dwDdeInst == NULL)
MessageBox(NULL,"dwDdeInst is NULL!","Msg",MB_OK);
tagHsz = DdeCreateStringHandle(dwDdeInst,
lpItem[nIndex], CP_WINANSI);
if(tagHsz == NULL)
MessageBox(NULL,"tagHsz is NULL!","Msg",MB_OK);
HDDEDATA getfromsrv;
if(ItemHSZ[nIndex] == NULL)
MessageBox(NULL,"DdeClientRequest Running!","Msg",MB_OK);
getfromsrv=DdeClientTransaction(NULL,0L,hRunConv,ItemHSZ[nIndex],CF_TEXT,
XTYP_REQUEST,2000,NULL);
if(getfromsrv != NULL)
{
MessageBox(NULL,"DdeClientRequest Running!","Msg",MB_OK);
LPBYTE recvclt;
recvclt=new BYTE[40];
DdeGetData(getfromsrv, recvclt, DdeGetData(getfromsrv, NULL, 0, 0), 0);
strcpy(cDataFromSrv,(LPSTR)recvclt);
delete recvclt;
DdeFreeStringHandle(dwDdeInst,tagHsz);
DdeFreeDataHandle(getfromsrv);
return TRUE;
}
else
return TRUE;
tigerfox
2003-08-12
打赏
举报
回复
你是怎么做的,具体说说?
qqxia
2003-08-12
打赏
举报
回复
DDE中的操作,烦阿
在线程中调用DDE的全局函数就会失败!!!
fantiyu
2003-08-12
打赏
举报
回复
不明白你的失败代表什么
是不是没加保护?
critical_section加了吗?
蟑螂工作室
2003-08-12
打赏
举报
回复
不太懂你的意思?
是不是你没有声明呀?
gzshd
2003-08-12
打赏
举报
回复
全局函数或变量在线程中的前面要加volatile,如
volatile int a;
volatile int a(){
...
}
qqxia
2003-08-12
打赏
举报
回复
没有人明白吗?
qqxia
2003-08-12
打赏
举报
回复
现在懂DDE的人很少了!
有谁做过多线程DDE数据采集程序的朋友,可以给我发一个多线程的DDE数据采集程序源代码!?
qqxia7885@sina.com
微软的专家呢?都到什么地方去了?
C语言: 多
线程
(1)-多
线程
函数
调用
异步执行
函数
线程
Dome
调用
MSVC CRT的
函数
_beginthread()或_beginthreadex()来创建
线程
。 _beginthread 参数和返回值 unsigned long _beginthread( void(_cdecl *start_address)(void *), //声明为void (*start_address)(void *)形式 ,一般指
函数
名称 un...
VC++多
线程
函数
调用
在VC++
中
创建
线程
函数
可以用API 或者MFC封装的多
线程
函数
。。
函数
原型 MSDN
中
CreateThread原型: HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T dwStackSize, // initial stack size LPTH
【Python笔记1.3】C/C++多
线程
调用
Python
函数
概述 在上一篇笔记
中
讲述了C/C++多
线程
调用
Python类,但是如果Python提供的接口不是class封装的情况该怎么办呢,此时如何保证在C/C++多
线程
调用
Python代码时能够正常运行呢? 在多
线程
开发
中
,尽量避免使用
全局
变量,我们可以将Python
中
需要
全局
初始化的变量放到一个字典(或元祖或列表)
中
,并将该字典作为handle整体返回给
调用
者。 python代码示例 clas...
c++ 类
线程
函数
使用
C++
中
线程
函数
为静态
函数
及 类成员
函数
作为回调
函数
线程
函数
为静态
函数
:
线程
控制
函数
和是不是静态
函数
没关系,静态
函数
是在构造
中
分配的地址空间,只有在析构时才释放也就是
全局
的东西,不管
线程
是否运行,静态
函数
的地址是不变的,并不在
线程
堆栈
中
static只是起了一个装饰的作用,所以二者并没有必然的关系
线程
也是一种资源,是受系统调度的。因此,你必须要让系统知道你的
线程
的起始位置,...
Windows c++在类
中
使用多
线程
由于当前开发环境为VS2010,暂时不能使用c++11 std
中
的thread类,这里只能使用WINapi CreateThread来创建
线程
。 一.在类
中
使用多
线程
的简单步骤及例子: 1,在类
中
将
线程
函数
写成静态成员
函数
(也可以将
线程
函数
做成
全局
函数
)。 2,参数为(LPVOID pParam)用来传入类 对象指针this,也可以传入其他数据结构。 3,进入
调用
线程
函数
的
函数
时...
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章