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

出现不可预料的出错的ShowMessage of AnsiString;该如何解决

2012-02-10 
出现不可预料的出错的ShowMessage of AnsiString - C++ Builder / Windows SDK/APIShowMessage的问题,在

出现不可预料的出错的ShowMessage of AnsiString; - C++ Builder / Windows SDK/API
ShowMessage的问题,在线程中调用,出现字串没有显示,或是很长的现象,随机出现的。
代码如下,

DWORD WINAPI ThreadFunc( LPVOID p)
{ DWORD dwSigned;
AnsiString str;
int i;
i=0;
for( i=1;i<5;i++)
{
  dwSigned= WaitForSingleObject( hSign,INFINITE );
  str.sprintf("dwSigned:%d i:%d",dwSigned,i);
  ShowMessage(str);
  }
  return 0;

}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 hthread=CreateThread(NULL,
  0,
  ThreadFunc,
  this,
  CREATE_SUSPENDED,
  &threadid );
//LPCTSTR lpName ;
 AnsiString str;
 hSign=CreateEvent(NULL,false,true,"dr"); //
 str.sprintf("hthread:%d ,threadid:%d",hthread,threadid);
 ShowMessage(str);
 ResumeThread(hthread);
// CloseHandle(threadid);
}

void __fastcall TForm1::Button4Click(TObject *Sender)
{
SetEvent(hSign);
}
//---------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
ResetEvent(hSign);
}


[解决办法]
这个要用同步方法的
[解决办法]
不要在线程函数中ShowMessage等界面相关操作,应该发送消息到主界面,然后主界面响应消息显示。
[解决办法]

探讨
不要在线程函数中ShowMessage等界面相关操作,应该发送消息到主界面,然后主界面响应消息显示。

[解决办法]
探讨
引用:
不要在线程函数中ShowMessage等界面相关操作,应该发送消息到主界面,然后主界面响应消息显示。

这个有理。你可用MessageBox代替ShowMessage
MessageBox(NULL,str.c_str(),"test",0);

热点排行