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

为什么看不到窗体?解决方案

2012-03-09 
为什么看不到窗体?怪怪的问题,在FormCreate函数中加入自己写的如下函数就看不到窗体,这个问题什么原因,如

为什么看不到窗体?
怪怪的问题,在FormCreate函数中加入自己写的如下函数就看不到窗体,这个问题什么原因,如何解决?


程序可以很正常的运行,但是就是看不到窗体。

void   __fastcall   TfMain::FormCreate(TObject   *Sender)
{
SocketAccept();
}


//---------------------------------------
void   SocketAccept(   void   )
{
struct   sockaddr_in   ClientAddr;//保存客户端地址
int   iLen   =   sizeof(   ClientAddr   );

DWORD   dwThreadId;
HANDLE   hThread   =   NULL;

SOCKET   *pSessionSocket;

while(   TRUE   )
{
pSessionSocket   =   (SOCKET   *)malloc(   sizeof(   SOCKET   )   );
if(   NULL   ==   pSessionSocket   )
{
continue;
}

*pSessionSocket   =   INVALID_SOCKET;

/*   服务器等待客户端连接   */
*pSessionSocket   =   accept(   g_ListenSocket,   (struct   sockaddr   *)&ClientAddr,   &iLen);
if(   INVALID_SOCKET   ==   *pSessionSocket   )
{
free(   pSessionSocket   );
pSessionSocket   =   NULL;

continue;
}

//为每个连接开一个新线程,把Socket传递给新线程
hThread   =   CreateThread(   NULL,   0,   SessionThread,   (LPVOID)pSessionSocket,   0,   &dwThreadId);
if(   NULL   ==   hThread   )
{
(void)closesocket(   *pSessionSocket   );
*pSessionSocket   =   INVALID_SOCKET;
free(   pSessionSocket   );
pSessionSocket   =   NULL;

continue;
}

}
}

[解决办法]
因为SocketAccept()里面有一个无限循环,也就是说FormCreate()永远也执行不完,自然就不会显示了。你可以把建立SocketAccept()本身做成一个线程,那样就行了,或者在SocketAccept()前强制Show()一下。建议采用前者。

热点排行