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

关于c++builder线程有关问题

2013-01-06 
关于c++builder线程问题。我在写线程的时候这个createThread执行2次时没有问题但是执行第三次时程序突然自

关于c++builder线程问题。
我在写线程的时候这个createThread
执行2次时没有问题但是执行第三次时程序突然自动关闭了。
不知道为什么?
请指教。
__fastcall TMyThread::TMyThread(bool CreateSuspended):TThread(CreateSuspended)
{
j+=1;
Form1->Edit2->Text=j;
}

__fastcall TMyThread::~TMyThread()
{

}
void   __fastcall   TMyThread::Execute()
{
int i;
for (i = 0; i < 90000; i++) {
i+=1;
Form1->Edit1->Text=i;
}
}
int cnt;
void __fastcall TForm1::createThread(TObject *Sender)
{
MyThread = new TMyThread(false);
cnt+=1;
Edit3->Text= cnt;
}
[解决办法]
同步问题,参考Thread的Synchronize方法
[解决办法]
在线程中不能直接更新 Form 上的控件,必须使用 Synchronize 进行同步
[解决办法]
差不多是这样写:


class TMyThread : public TThread {
private :
   int m_nValue1;
   void __fastcall ShowValue1();
};

void __fastcall TMyThread::ShowValue1() {
    Form1->Edit1->Text = m_nValue1;
}
void __fastcall TMyThread::Execute() {
    int i;
    for (i = 0; i < 90000; i++) {
        i+=1;
        m_nValue = i;
        Synchronize(ShowValue1);
    }
}

构造函数里的应该不用同步
[解决办法]
用API吧


  DWORD  __stdcall AThread(LPVOID) {
   int i;   
   for (i = 0; i < 90000; i++) 
      {
        i+=1;
       Form1->Edit1->Text=i;
      }
 }

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   DWORD  threadid1;
   HANDLE ht=CreateThread(NULL,0,AThread,NULL,0,&threadid1);
   CloseHandle(ht);
}

[解决办法]
引用:
用API吧

C/C++ code

  DWORD  __stdcall AThread(LPVOID) {
   int i;   
   for (i = 0; i < 90000; i++) 
      {
        i+=1;
       Form1->Edit1->Text=i;
      }
 }

void __fastcall TForm1::Button1C……


你这样写就没问题了?vcl不是线程安全的,不管是api线程,还是vcl线程

热点排行