CreateFile/readfile&;writefile多线程-无效句柄
我不明白这为什么不起作用:CreateFile/readfile&;writefile多线程-无效句柄,c,windows,multithreading,C,Windows,Multithreading,我不明白这为什么不起作用: void __cdecl main_pipe_client(void * Args) { py_func python_func; BOOL bRet; DWORD size = 0; hpipe = CreateFile(TEXT("D:/stc_5010"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUT
void __cdecl main_pipe_client(void * Args)
{
py_func python_func;
BOOL bRet;
DWORD size = 0;
hpipe = CreateFile(TEXT("D:/stc_5010"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);
if (hpipe == INVALID_HANDLE_VALUE)
{
// its OK there is no error
}
while (1)
{
char wiadomosc[50];
bRet = ReadFile(hpipe, wiadomosc, 50, &size, NULL);
//READING ONLINE
if (bRet == FALSE)
{
python_func.py_AppendChat(1, 1, "Read Failed : Bytes Read : %u", size);
break;
}
if (size > 0){
// There is OK
}
Sleep(1500);
size = 0;
}
}
hpipe-在程序句柄hpipe的开头声明
void init(){
Sleep(500);
py_func python_func;
char buf[256];
DWORD wpisano = 0;
sprintf_s(buf, "INIT_CHARACTER");
if (!WriteFile(hpipe, buf, 256, &wpisano, NULL)){
char buf5[256];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf5, 256, NULL);
sprintf_s(buf5, "%s %d", buf5, GetLastError());
MessageBoxA(NULL, (LPCSTR)buf5, (LPCSTR) "ERROR", NULL); // return error 6
}
}
但如果我在循环中,在主管道中,客户端函数writefile中,这很好。并将数据写入文件。
但是如果我在之后使用这个func init()
然后writefile返回无效句柄…由于您是在线程内创建管道,因此调用writefile()时hpipe句柄可能无效。您需要“同步”线程才能正常工作
创建一个say“MyPipeCreateEvent”,在成功执行
CreateFile()
之后,它将由main\u pipe\u client()设置。在“MyPipeCreateEvent”上的init()
,WaitForSingleobject()
,并仅在设置事件时继续写入文件。为什么在MessageBoxA()调用中强制转换这些内容?它们看起来没用。//没问题,没有错误。不是在这个星球上。
HANDLE hThread = (HANDLE)_beginthread(main_pipe_client, 0, NULL);