如何在C中创建一个非常基本的线程函数

时间:2015-08-11 09:26:04

标签: c multithreading winapi

我的c经验有限,几乎没有使用线程的经验。如果有一种简单的方法将“forever”函数包装到一个线程中并允许main()继续运行,请告诉我它是如何完成的。这个例子当然是完全不切实际的,但如果我能让它发挥作用,我认为这是一个很好的起点。也许它甚至不可能?但想知道。谢谢!

//
#include <Windows.h>
#include <stdlib.h> 
#include <iostream>
#include <stdio.h>
#include "stdafx.h"

void foreverFunction(); // function prototype

int myNumber=1;

void main()
{

    foreverFunction();   // call forever (looping function), would like get it running as a separate thread so that the code below can continue.
    while (myNumber != 0 ){
        printf("Enter a number (0 to exit): ");
        scanf("%d",&myNumber);
        printf("Entered: %d\n",myNumber);
    }

}


// function below should report the current value of myNumber every second
void foreverFunction(){
while (myNumber>0){
    printf ("\nThis will run until the user enters 0, Last value entered was %d\n",myNumber);
    Sleep(1000);
    }
}

3 个答案:

答案 0 :(得分:1)

对于像您这样的简单程序,您可以使用beginthread()

_beginthread(foreverfunction, 0, NULL);

第一个参数是函数指针(函数的名称)。第二个是堆栈大小,可以是0.第三个是你想要给你的函数的参数(更具体地说,是指向参数的指针)。如果您有多个参数,则必须将它们打包到结构中

您可以在Windows中使用的另一个函数是CreateThread() for Linux(POSIX)请参阅haris回答

答案 1 :(得分:0)

<强>被修改

如果您正在使用Linux,则可以使用pthread来实现此目的。对于您的示例,为了让function永远保持运行,您可以执行类似

的操作
pthread_t thread1;

pthread_create (&thread1, NULL, (void *) &foreverFunction);
pthread_join(thread1, NULL);

现在,在main退出之前,您的功能不会退出。这由pthread_join()电话处理。

答案 2 :(得分:0)

这是我更新的代码(来自上面的示例),它正在运行并完全符合我的预期。谢谢大家。

#include <windows.h>
#include <WinBase.h>
#include <stdlib.h> 
#include <iostream>
#include <stdio.h>
#include "stdafx.h"
#include <process.h>

int myNumber=1;

// function below should report the current value of myNumber every second
unsigned __stdcall foreverFunction(void* pArguments){

printf("The thread is started...\n");

while (myNumber>0){
    printf ("Selected number: %d\n",myNumber);
    Sleep(1000);
    }
printf("The thread as exited... \n");
return NULL;
}      

void main()
{
    HANDLE hThread;
    unsigned threadID;

    hThread = (HANDLE)_beginthreadex( NULL, 0, &foreverFunction, NULL, 0, &threadID );

    while (myNumber != 0 ){
        printf("Enter a number (0 to exit): ");
        scanf("%d",&myNumber);
        printf("Entered: %d\n",myNumber);
    }

}

控制台输出:

Enter a number (0 to exit): The thread is started...
Selected number: 1
Selected number: 1
Selected number: 1
Selected number: 1
Selected number: 1
3
Entered: 3
Enter a number (0 to exit): Selected number: 3
Selected number: 3
Selected number: 3
Selected number: 3
Selected number: 3
Selected number: 3
Selected number: 3
54
Entered: 54
Enter a number (0 to exit): Selected number: 54
Selected number: 54
Selected number: 54
Selected number: 54