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