当前位置:  开发笔记 > 编程语言 > 正文

多个线程从同一个文件读取

如何解决《多个线程从同一个文件读取》经验,为你挑选了1个好方法。

我的平台是windows vista 32,带有visual c ++ express 2008.

例如:

如果我有一个包含4000个字节的文件,我可以同时从文件中读取4个线程吗?并且每个线程访问文件的不同部分.

线程1读取0-999,线程2读取1000 - 2999等.

请举一个C语言的例子.



1> Francis..:

如果你不写信给他们,则无需照顾同步/竞争条件.

只需打开共享阅读文件作为不同的句柄,一切都会工作.(即,您必须在线程的上下文中打开文件,而不是共享相同的文件句柄).

#include 
#include 

DWORD WINAPI mythread(LPVOID param)
{
    int i = (int) param;
    BYTE buf[1000];
    DWORD numread;

    HANDLE h = CreateFile("c:\\test.txt", GENERIC_READ, FILE_SHARE_READ,
        NULL, OPEN_EXISTING, 0, NULL);

    SetFilePointer(h, i * 1000, NULL, FILE_BEGIN);
    ReadFile(h, buf, sizeof(buf), &numread, NULL); 
    printf("buf[%d]: %02X %02X %02X\n", i+1, buf[0], buf[1], buf[2]);

    return 0;
}

int main()
{
    int i;
    HANDLE h[4];

    for (i = 0; i < 4; i++)
        h[i] = CreateThread(NULL, 0, mythread, (LPVOID)i, 0, NULL);

    // for (i = 0; i < 4; i++) WaitForSingleObject(h[i], INFINITE);
    WaitForMultipleObjects(4, h, TRUE, INFINITE);

    return 0;
}


WaitForSingleObject()的循环应该用一个WaitForMultipleObjects()调用替换.除此之外它是+1.
推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有