【问题标题】:CreateFile / readfile & writefile multi threading - invalid handle [closed]CreateFile / readfile & writefile多线程-无效句柄[关闭]
【发布时间】:2014-02-18 09:40:15
【问题描述】:

我不明白为什么这不起作用:

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 - 在程序的开头声明 HANDLE 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
    }

}

但如果我在 main_pipe_client 函数 writefile 中进行循环,这很好。并将数据写入文件。 但是如果我在

之后使用这个func init()
HANDLE hThread = (HANDLE)_beginthread(main_pipe_client, 0, NULL);

然后writefile返回无效句柄...

【问题讨论】:

  • 为什么在 MessageBoxA() 调用中进行这些转换?它们看起来毫无用处。
  • // its OK there is no error。不在这个星球上。

标签: c windows multithreading


【解决方案1】:

由于您是在线程内创建管道,因此调用 WriteFile() 时 hpipe HANDLE 可能无效。您需要“同步”线程才能正常工作。

创建一个event 说“MyPipeCreateEvent”,这将在成功完成CreateFile() 后由main_pipe_client() 设置。在“MyPipeCreateEvent”上的init()、WaitForSingleobject() 中,仅在设置事件后继续写入文件。

【讨论】:

    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多