请教高手,我在多线程中打开一个数据模块的ClientDataSet为什么老是报错!

jiangbo_liu 2003-01-04 03:08:58
请教高手,我在多线程中打开一个数据模块的ClientDataSet为什么老是报错!
感激涕零!

__fastcall TDown::TDown(bool CreateSuspended)
: TThread(CreateSuspended)
{
}

void __fastcall TDown::Execute()
{
DMDown->ClientDataSet1->Close();
DMDown->ClientDataSet1->Open();
}

Project Update.exe raised exception class EVariantInvalidArgError with message 'Invalid argument',Process stopped.....
...全文
135 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Xhunter 2003-06-24
  • 打赏
  • 举报
回复
初始化COM环境
猛禽 2003-06-23
  • 打赏
  • 举报
回复
还有一个问题是,线程中OPEN CDS会需要调用Connection的IAppServer接口的AS_GetRecords方法,而跨线程使用接口必须经过Marshal
书生 2003-06-23
  • 打赏
  • 举报
回复
我的也是报这个错误,头大死了。
SocketConnection 和ClientDataSet 都是new的,还和主程序的连接冲突么?
该赋值的参数都赋值了啊。
帖主如果问题解决,请发个短信息给我,不胜感激。
欢迎交流。
xiaojianw 2003-01-07
  • 打赏
  • 举报
回复
up
猛禽 2003-01-07
  • 打赏
  • 举报
回复
呵,多线程中用的DM最好是自己NEW出来的,用共用的肯定会有问题.

比如你的情况很可能出现在DM中的CDS参数未定义,因为如果服务端DSP连的DATASET有参数的话,在设计期CDS可以连接取得,但在运行期就不行,如果不用代码把它们加上,就会出参数错.另外,也有可能是主线程在某些地方改变了参数,线程里用了同一个CDS,当然出错了.
child_bj 2003-01-05
  • 打赏
  • 举报
回复
是用的VCL的类吧

有没有注意加上Synchornize跟VCL同步的问题?


不过看你的提示不像是这个问题~~~是不是哪个参数没弄好?
invalid 2003-01-05
  • 打赏
  • 举报
回复
在模块初始化时先创建。
在线程中要访问,先WaitForsignalobj...。然后访问。最后release
l_clove 2003-01-05
  • 打赏
  • 举报
回复
互斥:

CRITICAL_SECTION g_WaitInitEnd;
InitializeCriticalSection(&g_WaitInitEnd);

EnterCriticalSection(&g_WaitInitEnd);
(Your Source Code...)
LeaveCriticalSection(&g_WaitInitEnd);

DeleteCriticalSection(&g_WaitInitEnd);
jiangbo_liu 2003-01-04
  • 打赏
  • 举报
回复
多谢,多谢!
在单线程中已经测试通过。放在另外一个线程打开中却不行。
请问怎么防止并发,互斥Mutex怎么做?
invalid 2003-01-04
  • 打赏
  • 举报
回复
1.先在单线程测试通过后再在多线程测试。
2.多线程要注意并发。用互斥Mutex可以防止。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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