定义一个附加结构
typedef struct _PipeResult
{
OVERLAPPED Ovlap; /*重叠IO*/
char szCmd[1024]; /*数据缓冲区*/
enumPipeType PipeType; /*类型:1连接,2读取,3写入,4关闭*/
}PipeResult ,*lPipeResult;HANDLE g_Event; /*事件对象*/void main()
{
/*省略部分代码*/
HANDLE PipeHandles = CreateFile(...命名管道对象..);
g_Event = CreateEvent(NULL, TRUE, FALSE, NULL);
_beginthreadex(NULL,0,pfun,(void*)PipeHandles,0,NULL); /*开始一个工作线程*/
lPipeResult lPipeResult = new PipeResult();
ZeroMemory(&(g_lpResult->Ovlap), sizeof(OVERLAPPED));
lPipeResult->Ovlap.hEvent = g_Event;
lPipeResult->PipeType = PipeWrite;
lPipeResult(lPipeResult->szCmd,"hello");
/*写入请求*/
if (WriteFile(PipeHandles,lPipeResult->szCmd,5, NULL,&(lPipeResult->Ovlap)) == 0){
return 0;
}
/*省略部分代码*/
}
/*工作线程函数*/
UINT WINAPI ReadFileFunc(LPVOID lpParam)
{
HANDLE PipeHandles = (HANDLE)lpParam;
DWORD BytesTransferred;
LPOVERLAPPED Overlapped = new OVERLAPPED();
while (TRUE){
WaitForSingleObject(g_Event,INFINITE);
ResetEvent(g_Event);
GetOverlappedResult(PipeHandles,Overlapped,&BytesTransferred, TRUE);
lPipeResult lpResult = (lPipeResult)Overlapped; /*获取附加结构传递数据-根本没取到啊*/
printf("WriteFIle byte=[%d],string=[%s]\n", BytesTransferred,lpResult->szCmd);
}
}
我想通过lPipeResult lpResult = (lPipeResult)Overlapped; 来获取写入的数据值,
但发现取不到,应该怎么样才能取到值呢.附加数据结构到底是怎么使用的啊.我这里怎么没用啊。
typedef struct _PipeResult
{
OVERLAPPED Ovlap; /*重叠IO*/
char szCmd[1024]; /*数据缓冲区*/
enumPipeType PipeType; /*类型:1连接,2读取,3写入,4关闭*/
}PipeResult ,*lPipeResult;HANDLE g_Event; /*事件对象*/void main()
{
/*省略部分代码*/
HANDLE PipeHandles = CreateFile(...命名管道对象..);
g_Event = CreateEvent(NULL, TRUE, FALSE, NULL);
_beginthreadex(NULL,0,pfun,(void*)PipeHandles,0,NULL); /*开始一个工作线程*/
lPipeResult lPipeResult = new PipeResult();
ZeroMemory(&(g_lpResult->Ovlap), sizeof(OVERLAPPED));
lPipeResult->Ovlap.hEvent = g_Event;
lPipeResult->PipeType = PipeWrite;
lPipeResult(lPipeResult->szCmd,"hello");
/*写入请求*/
if (WriteFile(PipeHandles,lPipeResult->szCmd,5, NULL,&(lPipeResult->Ovlap)) == 0){
return 0;
}
/*省略部分代码*/
}
/*工作线程函数*/
UINT WINAPI ReadFileFunc(LPVOID lpParam)
{
HANDLE PipeHandles = (HANDLE)lpParam;
DWORD BytesTransferred;
LPOVERLAPPED Overlapped = new OVERLAPPED();
while (TRUE){
WaitForSingleObject(g_Event,INFINITE);
ResetEvent(g_Event);
GetOverlappedResult(PipeHandles,Overlapped,&BytesTransferred, TRUE);
lPipeResult lpResult = (lPipeResult)Overlapped; /*获取附加结构传递数据-根本没取到啊*/
printf("WriteFIle byte=[%d],string=[%s]\n", BytesTransferred,lpResult->szCmd);
}
}
我想通过lPipeResult lpResult = (lPipeResult)Overlapped; 来获取写入的数据值,
但发现取不到,应该怎么样才能取到值呢.附加数据结构到底是怎么使用的啊.我这里怎么没用啊。
将该OVERLAPPED关连到某个读/写操作上
然后,用一个等待函数等待OVERLAPPED里事件的触发
事件触发后,进一步确定读写类型-----------------------------
理解了重叠i/o的基本思想后,windows下各处的重叠i/o应用都一样
传入的应该是你自己的定义的结构 lPipeResult lPipeResult = new PipeResult();
即GetOverlappedResult(PipeHandles,lPipeResult ,&BytesTransferred, TRUE);你可以试一下
但我我现在就是一个线程里面不知道lPipeResult指针情况,如果取数据.比如我试过可以定义一个新的
lPipeResult = new PipeResult();在传进去,但是这样取不到数据啊.
lpOverlapped
[in] Pointer to an OVERLAPPED structure that was specified when the overlapped operation was started.
也就是说是输入的值,并不会返回值估计想带数据是不可能了,如果真想带数据的话只能用完成端口了