奇怪的线程问题!
我在主界面通过“更新”按钮启动一个线程,线程在停止之前我无法对数据库进行修改,也就是线程启动后点击主界面上的其它按钮修改数据库内容没有反应。请高手指点! 问题点数:20、回复次数:10Top
1 楼lurel(城市陌生人)回复于 2006-03-14 11:13:33 得分 0
你是怎么写和调用线程的,应该是调用上有问题Top
2 楼cfs1979(学无止境)回复于 2006-03-14 11:25:25 得分 0
__fastcall TThreadGetData::TThreadGetData(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
__fastcall TThreadGetData::TThreadGetData(bool CreateSuspended,TTreeNode *updatenode)
: TThread(CreateSuspended)
{
signfullnode = updatenode;
FreeOnTerminate = true;
}
void __fastcall TThreadGetData::Execute()
{
CoInitialize(NULL);
Form_MainForm->Func_UpdateChannel(signfullnode); //主界面函数操作数据库内容
CoUninitialize();
}
//更新按钮
TThreadGetData *aa = new TThreadGetData(true,NULL);
aa->Resume();
请各位高手指点!Top
3 楼cfs1979(学无止境)回复于 2006-03-14 14:27:20 得分 0
着急呀,高手快来呀Top
4 楼freefishlala()回复于 2006-03-14 15:06:16 得分 5
操作主界面上的控件(signfullnode),应该需要用同步Synchronize吧Top
5 楼lurel(城市陌生人)回复于 2006-03-14 15:19:09 得分 0
不要调用Form_MainForm->Func_UpdateChannel(signfullnode); //主界面函数操作数据库内容
自己重写一段Top
6 楼cfs1979(学无止境)回复于 2006-03-14 16:52:53 得分 0
不是吧,我在Func_UpdateChannel(signfullnode)函数中调用了大量在主界面中定义的控件、变量。没有其它办法了吗?Top
7 楼lurel(城市陌生人)回复于 2006-03-14 17:03:30 得分 15
因为你在这个线程里面又调用了主线程的资源,当然会没有反应了,因为实际操作的还是主线程.所以建议你重写Top
8 楼cfs1979(学无止境)回复于 2006-03-14 17:24:20 得分 0
我现在已经把所有用到的函数全部定义在线程中重写了,可是还是不行呀Top
9 楼cfs1979(学无止境)回复于 2006-03-15 08:22:23 得分 0
着急呀,还望大家帮忙呀Top
10 楼cfs1979(学无止境)回复于 2006-03-15 14:28:22 得分 0
什么原因呀,这么大的一个论坛怎么没有人来呀,高手都去那里了?????
难道没有人知道吗????
不会吧????Top




