我想在C中创建一个线程,以便线程在两秒后自动调用。我正在使用Visual Studio和Windows平台进行开发。
我如何开始?
答案 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 library或Intel 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;
}