在C中穿线

时间:2009-12-29 07:23:28

标签: c

我想在C中创建一个线程,以便线程在两秒后自动调用。我正在使用Visual Studio和Windows平台进行开发。

我如何开始?

7 个答案:

答案 0 :(得分:18)

您将需要使用特定于操作系统的库来执行线程。在Posix上,您需要查看pthreads(特别是pthread_create)。在Windows上,您需要CreateThread或_ beginthreadex

答案 1 :(得分:4)

C中的多线程取决于平台。您需要使用与不同平台相对应的外部库。

阅读:

Multithreading in C, POSIX style Multithreading with C and Win32

答案 2 :(得分:2)

标准C中没有任何内容可以帮助您。您需要使用一些库或平台相关的功能。不要忘记许多平台根本没有线程 - 只有全权重的过程。

在Windows上使用CreateThread()。您需要Microsoft SDK才能使用此函数和其他Win32函数编译代码。

答案 3 :(得分:2)

C没有内置的线程设施;您将不得不使用您的OS服务来创建一个线程。

对于Windows使用CreateThread函数。

答案 4 :(得分:2)

您可以查看此链接以了解不同的方法: Windows threading: _beginthread vs _beginthreadex vs CreateThread C++

对于跨平台代码,您还可以查看Boost libraryIntel Threading Building Blocks

答案 5 :(得分:1)

请参阅MSDN for VC8。请参阅createThread()帮助。这应该给你足够的信息。

如需在线查询,请访问以下链接:

http://msdn.microsoft.com/en-us/library/ms682453(VS.85).aspx

答案 6 :(得分:0)

这里是用C语言编写的Win32API中的单线程和多线程示例程序,将在Visual Studio上运行。

SingleThread.c

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>

DWORD WINAPI funHello(void *x)
{
    int c = (int*)x;
    printf("\n Thread No: %d\n",c);
    Sleep(2000);
    return 0;
}

int main()
{
    HANDLE  myhandle;
    DWORD threadId;
    int c = 1;
    myhandle = CreateThread(NULL, 0, funHello, (void *)c, 0, &threadId);
    if (myhandle == NULL)
    {
        printf("Create Thread Failed. Error no: %d\n", GetLastError);
    }
    WaitForSingleObject(myhandle, INFINITE);
    printf("\n Main Hello...\n");
    CloseHandle(myhandle);
    return 0;
}

MultiThreading.c

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#define NUM_THREADS 2     //  Define Number of threads here or take as user Input, 
                          // In yourquestion it is 2

DWORD WINAPI funHello(void *x)
{
    int c = (int*)x;
    printf("\n Thread No: %d\n",c);
    Sleep(2000);
    return 0;
}
int main()
{
    HANDLE *arrayThread;
    arrayThread = (int*)malloc(NUM_THREADS * sizeof(int));
    DWORD ThreadId;

    for (int i = 0; i < NUM_THREADS; i++)
    {
        arrayThread[i] = CreateThread(NULL, 0, funHello, (void *)i, 0, &ThreadId);
        if (arrayThread[i] == NULL)
        {
            printf("Create Thread %d get failed. Error no: %d", i, GetLastError);
        }
    }

    WaitForMultipleObjects(NUM_THREADS, arrayThread,TRUE,INFINITE);
    DWORD lpExitCode;
    BOOL result;

    for (int i = 0; i < NUM_THREADS; i++)
    {
        CloseHandle(arrayThread[i]);
    }
    printf("\n Hello Main..");
    return 0;
}