C语言中的多线程问题

C语言中的多线程问题,c,multithreading,winapi,C,Multithreading,Winapi,我第一次在C中尝试多线程,我似乎做错了什么,希望你能帮我。这是我的密码: #include "stdafx.h" #define MAX_THREADS 2 int a[100000]; int b[200000]; void startThreads(); DWORD WINAPI populateArrayA(LPVOID data) { int i; int* pA = (int*)data; for(i = 0; i < sizeof(a) /

我第一次在C中尝试多线程,我似乎做错了什么,希望你能帮我。这是我的密码:

#include "stdafx.h"

#define MAX_THREADS 2


int a[100000];
int b[200000];

void startThreads();

DWORD WINAPI populateArrayA(LPVOID data)
{
    int i;
    int* pA = (int*)data;

    for(i = 0; i < sizeof(a) / sizeof(int); i++)
    {
        *pA = i;
        pA++;
    }

    return 0;
}
DWORD WINAPI populateArrayB(LPVOID data)
{
    int i;
    int* pB = (int*)data;

    for(i = 0; i < sizeof(b) / sizeof(int); i++)
    {
        *pB = i;
        pB++;
    }
    return 0;
}

void startThreads()
{
    HANDLE threads[MAX_THREADS];
    DWORD  threadIDs[MAX_THREADS];

    threads[0] = CreateThread(NULL,0,populateArrayA,a,0,&threadIDs[0]);
    threads[1] = CreateThread(NULL,0,populateArrayB,b,0,&threadIDs[1]);

    if(threads[0] && threads[1])
    {
        printf("Threads Created. (IDs %d and %d)",threadIDs[0],threadIDs[1]);
    }

    WaitForMultipleObjects(MAX_THREADS,threads,true,0);

}

int main(int argc, char* argv[])
{
    int i;

    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));

    startThreads();

    return 0;
}
#包括“stdafx.h”
#定义最大线程数2
INTA[100000];
int b[200000];
void startThreads();
DWORD WINAPI populateArrayA(LPVOID数据)
{
int i;
int*pA=(int*)数据;
对于(i=0;i
在这段代码中,数组“b”似乎可以很好地填充,而数组“a”则不行。抱歉,如果答案是愚蠢的


编辑:我刚刚重试,两个数组都是“0”。不太清楚发生了什么事。我正在使用Visual Studio,以防出现调试问题或其他问题


干杯。

WaitForMultipleObjects
的最后一个参数必须是
INFINITE
,而不是
0

使用
0
,函数立即返回。

WaitForMultipleObjects的最后一个参数必须是
无限
,而不是
0

使用
0
,函数会立即返回。

那么
a
最终会是什么样子呢?所有的“0”,因为它们也是初始化的。谢谢你,小鸟。我刚刚通过VisualStudio2010运行了这段代码,它们看起来都很好。我只是再次尝试,两个数组都是“0”。不太清楚发生了什么。什么时候以及如何检查数组值?那么
a
最终看起来像什么?所有的“0”,因为它们也是初始化的。谢谢你,小鸟。我刚刚通过VisualStudio2010运行了这段代码,它们看起来都很好。我只是再次尝试,两个数组都是“0”。不太清楚发生了什么。什么时候以及如何检查数组值?太好了。谢谢你的帮助。但奇怪的是,它在我的系统上仍然运行良好。也许我的处理器速度更快,能够完成线程。太好了。谢谢你的帮助。但奇怪的是,它在我的系统上仍然运行良好。也许我的处理器速度更快,能够完成线程。