//我类似下面这样创建了一个完成端口
g_hIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,0,0);//省略错误处理了
//创建一个作业
xxx;
//我类似下面这样把作业与完成端口关联
jbacp.CompletionKey = (PVOID)COMPKEY_JOBOBJECT;
jbacp.CompletionPort = g_hIOCP;
fOK = SetInformationJobObject(g_hJob,JobObjectAssociateCompletionPortInformation,&jbacp,sizeof(JOBOBJECT_ASSOCIATE_COMPLETION_PORT));
//创建线程,执行函数类似如下:
while(true){
GetQueuedCompletionStatus(xxx,xxx,lCompKey,...)//获取IO完成信息
if(lCompKey == COMPKEY_JOBOBJECT)
{
xxx;
}
if(lCompKey == COMPKEY_STATUS)
{
yyy;
}
}
//主线程发送完成包
PostQueuedCompletionStatus(g_hIOCP, 0, COMPKEY_STATUS, NULL);
但从来没有发送过COMPKEY_JOBOBJECT,为啥我的
if(lCompKey == COMPKEY_JOBOBJECT)
{
xxx;
}
程序段可以执行呢?比如我在作业中创建一个进程的时候,就执行了xxx;但创建进程时并没发送任何包
g_hIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,0,0);//省略错误处理了
//创建一个作业
xxx;
//我类似下面这样把作业与完成端口关联
jbacp.CompletionKey = (PVOID)COMPKEY_JOBOBJECT;
jbacp.CompletionPort = g_hIOCP;
fOK = SetInformationJobObject(g_hJob,JobObjectAssociateCompletionPortInformation,&jbacp,sizeof(JOBOBJECT_ASSOCIATE_COMPLETION_PORT));
//创建线程,执行函数类似如下:
while(true){
GetQueuedCompletionStatus(xxx,xxx,lCompKey,...)//获取IO完成信息
if(lCompKey == COMPKEY_JOBOBJECT)
{
xxx;
}
if(lCompKey == COMPKEY_STATUS)
{
yyy;
}
}
//主线程发送完成包
PostQueuedCompletionStatus(g_hIOCP, 0, COMPKEY_STATUS, NULL);
但从来没有发送过COMPKEY_JOBOBJECT,为啥我的
if(lCompKey == COMPKEY_JOBOBJECT)
{
xxx;
}
程序段可以执行呢?比如我在作业中创建一个进程的时候,就执行了xxx;但创建进程时并没发送任何包
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货