首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

查询信息 出现系统阻塞现象解决思路

2012-02-26 
查询信息 出现系统阻塞现象请教大家:时时查询信息是要在不断的运行的,但是那样会不断的占用资源,所以会出

查询信息 出现系统阻塞现象
请教大家:

时时查询信息是要在不断的运行的,但是那样会不断的占用资源,所以会出现阻塞现象

我现在把那时时查询写在了线程里 也把显示数据的也一起写在了线程里,可是还是会出
现阻塞现象,为什么呢?
下面是部分代码:

C/C++ code
void __fastcall QueryThread::Execute(){    //---- Place thread code here ----    Synchronize(QueryData);    if(pkgBuf->SetPackage(Form1->ReadBuffer)!=S_OK)return;    Synchronize(QueryProc1);}//---------------------------------------void __fastcall QueryThread::QueryData(){    long Length;    Form1->QueryTime->Enabled = false;    setmem(Form1->WriteBuffer,64,0);    pkgBuf->SetCommand(0xa1);    pkgBuf->SetDataLength(0x00);    pkgBuf->SetSlaveAddr(Form1->SlaveAddr->Text.ToInt());    pkgBuf->GetPackage(Form1->WriteBuffer);    comm->Write(Length,&dwWriteLength);    Form1->QueryTime->Enabled = true;}void __fastcall QueryThread::QueryProc1()   //查询协议  普通信息{  AnsiString str;  unsigned char Data[64];  unsigned short *p;  unsigned long *l;  SYSTEMTIME systime;  setmem(Data,64,0);  pkgBuf->GetData(Data);    p= (unsigned short*)&Data[0];        //直流电压    str = *p;    str = str.Insert(".",str.Length());    if(str.Pos(".") == 1)str = "0" + str;    Form1->vlQuery->Cells[1][1] = str+"V";        .........}

我已经把优先级改成最低的了tpIdle.

[解决办法]
void __fastcall QueryThread::Execute()

加点延时可以吗?
[解决办法]
线程里加延时Sleep(100);
[解决办法]
线程不足的地方是你的线程这种用法跟没用一样。
Synchronize里面的函数要短小,只包括直接操作VCL的代码。
需要长时间操作和等待的代码不要放到Synchronize里面的函数里。
[解决办法]
探讨
引用:
线程不足的地方是你的线程这种用法跟没用一样。
Synchronize里面的函数要短小,只包括直接操作VCL的代码。
需要长时间操作和等待的代码不要放到Synchronize里面的函数里。


对 Synchronize 是没什么用

但是这种用法根本没用?觉得有点奇怪
这样写线程根本没用吗?

热点排行