注册 登录
编程论坛 C++教室

多线程问题

袁德凯 发布于 2011-08-07 13:34, 796 次点击
我正在编写一个游戏辅助程序,但是由于运行速度的问题。我需要进行多线程编程。但是我没有学过多线程的编程 。希望大家帮帮忙。
具体要求如下:
建立5个线程 abcde,其中abcd同步运行,并且最终有int返回值。全部返回后线程e开始运行。
不知道谁能帮我写一个框架。这五个线程的内部具体实现代码我自己写。
6 回复
#2
诸葛修勤2011-08-07 15:09
程序代码:
#include <windows.h>
#include <stdio.h>

const int MAX_THREADS = 5;


DWORD __stdcall ThreadProc_1(LPVOID lpParam)
{
    while (1)
    {
        printf("a\n");
        Sleep(1 * 1000);
    }

    return 0;
}

DWORD __stdcall ThreadProc_2(LPVOID lpParam)
{
    while (1)
    {
        printf("b\n");
        Sleep(1 * 1000);
    }

    return 0;
}

DWORD __stdcall ThreadProc_3(LPVOID lpParam)
{
    while (1)
    {
        printf("c\n");   
        Sleep(1 * 1000);
    }

    return 0;
}

DWORD __stdcall ThreadProc_4(LPVOID lpParam)
{
    while (1)
    {
        printf("d\n");   
        Sleep(1 * 1000);
    }

    return 0;
}

DWORD __stdcall ThreadProc(LPVOID lpParam)
{
    HANDLE hThread[MAX_THREADS];

    hThread[0] = CreateThread (NULL, 0, ThreadProc_1, 0, 0, 0);
    hThread[1] = CreateThread (NULL, 0, ThreadProc_2, 0, 0, 0);
    hThread[2] = CreateThread (NULL, 0, ThreadProc_3, 0, 0, 0);
    hThread[3] = CreateThread (NULL, 0, ThreadProc_4, 0, 0, 0);

    DWORD result = WaitForMultipleObjects(MAX_THREADS-1, hThread,TRUE, INFINITE);

    if (result == WAIT_OBJECT_0)
    {
        printf("e\n");
    }

    return 0;
}

int main(void)
{
    ThreadProc((LPVOID)0);

    return 0;
}

基本的框架 就这样子


线程 同步 有 Event  Mutex Timer
自己也可以通过全局的方式 来达到同步  注意线程共享资源就ok
#3
lucky5635912011-08-08 12:56
多线程百度下就行了
#4
袁德凯2011-08-09 10:47
回复 2楼 诸葛修勤
files\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(47) : error C2011: “vc_attributes::YesNoMaybe”: “enum”类型重定义
1>        f:\program files\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(47) : 参见“vc_attributes::YesNoMaybe”的声明
1>d:\program files\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(57) : error C2011: “vc_attributes::AccessType”: “enum”类型重定义
1>        f:\program files\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(57) : 参见“vc_attributes::AccessType”的声明
1>d:\program files\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(71) : error C2011: “vc_attributes::Pre”: “struct”类型重定义
1>        f:\program files\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(71) : 参见“vc_attributes::Pre”的声明
1>d:\program files\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(68) : error C3094: “repeatable”: 不允许匿名使用
    不知道为什么我在2008上调试会出错,不过你这个思想很好,对我很有帮助。
    另外我对同一HDC 类型数据用四个线程读取时,读出的数据会出错。我没有加锁,但是我也没有进行写操作。我只是读取其中的数据。不知道你是否知道其中的原因?望能帮忙指教。
#5
袁德凯2011-08-09 10:49
回复 3楼 lucky563591
我有百度的,千篇一律,全都用了一个例子。而且用得太一般了。还是这里问比较专业。呵呵。。。。
#6
icecream2352011-08-09 13:32
多线程编程那里有的学。
#7
袁德凯2011-08-09 16:31
回复 6楼 icecream235
JAVA讲多线程的比较多。C++的我没见过,也不知道什么书比较好
1