我的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);
}
}
答案 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