读书人

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

发布时间: 2012-03-09 21:42:55 作者: rapoo

为什么看不到窗体?
怪怪的问题,在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()一下。建议采用前者。

读书人网 >C++ Builder

热点推荐