求救NT Service 程 序 问 题 一般情况下是放在死循环中,将套接口设置为阻塞方式,当有一个请求来后启动一个线程为这个请求服务。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最好开新线程来处理侦听(可以在循环中),这样主线程才能响应服务管理器的启动,停止等操作。我们写的很多服务程序都是这样做的。 两位大虾帮忙看一下,我的mywork应该放在什么地方?VOID MyWork(){ //后台要执行的任务,就是SOCKET开始侦听,用的是CSOCKET if (!FileListen.Create(8060,SOCK_STREAM,FD_ACCEPT,"171.171.1.4")) { fp=fopen("c:/temp/work04.txt","w"); fclose(fp); return 0; } if(!FileListen.Listen()) { fp=fopen("c:/temp/work05.txt","w"); fclose(fp); return 1; }}VOID ServiceStart(DWORD dwArgc, LPTSTR *lpszArgv){ //服务启动程序 if ((NULL != (__hRunEvents[0] = CreateEvent(NULL, TRUE, FALSE, NULL))) && (NULL != (__hRunEvents[1] = CreateEvent(NULL, TRUE, TRUE, NULL)))) { REPORTRUNNINGSTATUS //WaitForSingleObject(__hRunEvents[0],INFINITE); while (TRUE) { if (WAIT_OBJECT_0 == WaitForMultipleObjects(2, __hRunEvents, FALSE, INFINITE)) break; else { if (WAIT_OBJECT_0 == WaitForSingleObject(__hRunEvents[0], 0)) { // stop break; } else if (WAIT_OBJECT_0 != WaitForSingleObject(__hRunEvents[1], 0)) { // pause continue; } // TODO fill param memset(¶m, 0, sizeof(param)); __listServerThreadParam.AddTail(param); if ((nServerThreadCount >= MAXTHREADCOUNT) || (!CreateNewServiceThread(&__listServerThreadParam.GetTail()))) { param = __listServerThreadParam.RemoveTail(); continue; } nServerThreadCount ++; } } }} 集中处理Check Box的BN_CLICKED消息,有什么好办法! 超级简单问题,进来看看啊.... ACCESS的时间查询... ADO解决马上 大家進來坐一下! 问一个制作菜单的简单问题 '_bstr_t' : missing storage-class or type specifiers 值得收藏的东西大总结,敬请各位大侠慷慨解囊。 请大家多多指教 感觉VC的扩展关键字__event到底是如何起作用的? 怎样设置对话框背景? 请问高手,Windows的句柄是如何实现的?有关的资料请寄[email protected] 关于下载(急)
我们写的很多服务程序都是这样做的。
VOID MyWork()
{
//后台要执行的任务,就是SOCKET开始侦听,用的是CSOCKET
if (!FileListen.Create(8060,SOCK_STREAM,FD_ACCEPT,"171.171.1.4"))
{
fp=fopen("c:/temp/work04.txt","w");
fclose(fp);
return 0;
}
if(!FileListen.Listen())
{
fp=fopen("c:/temp/work05.txt","w");
fclose(fp);
return 1;
}
}VOID ServiceStart(DWORD dwArgc, LPTSTR *lpszArgv)
{
//服务启动程序
if ((NULL != (__hRunEvents[0] = CreateEvent(NULL, TRUE, FALSE, NULL))) &&
(NULL != (__hRunEvents[1] = CreateEvent(NULL, TRUE, TRUE, NULL))))
{
REPORTRUNNINGSTATUS
//WaitForSingleObject(__hRunEvents[0],INFINITE);
while (TRUE)
{
if (WAIT_OBJECT_0 == WaitForMultipleObjects(2, __hRunEvents, FALSE,
INFINITE)) break;
else
{
if (WAIT_OBJECT_0 == WaitForSingleObject(__hRunEvents[0], 0))
{ // stop
break;
} else if (WAIT_OBJECT_0 != WaitForSingleObject(__hRunEvents[1], 0))
{ // pause
continue;
} // TODO fill param memset(¶m, 0, sizeof(param));
__listServerThreadParam.AddTail(param);
if ((nServerThreadCount >= MAXTHREADCOUNT) ||
(!CreateNewServiceThread(&__listServerThreadParam.GetTail())))
{
param = __listServerThreadParam.RemoveTail();
continue;
}
nServerThreadCount ++;
}
}
}
}