C语言在指定的时间调用一个函数

我正在使用下面的C代码(Linux的Ubuntu的)每5分钟样本经纪服务器,并得到出价和问价值:

int main(int argc, char *argv[]) { struct stock myStock; struct stock *myStock_ptr; struct timeval t; time_t timeNow; strcpy(myStock.exchange,"MI"); strcpy(myStock.market,"EQCON"); strcpy(myStock.t3Id,"1"); strcpy(myStock.subscLabel,""); strcpy(myStock.status,"0"); strcpy(myStock.ask,""); strcpy(myStock.bid,""); buildSubLabel(&myStock); while (1) { t.tv_sec = 1; t.tv_usec = 0; select(0, NULL, NULL, NULL, &t); time(&timeNow); sample(&myStock); printf("DataLink on %s\n",myStock.subscLabel); printf("Time Now: --- %s",ctime(&timeNow)); printf("DataLink Status---- %s\n",myStock.status); printf("Ask --- %s\n",myStock.ask); printf("Bid --- %s\n",myStock.bid); printf("###################\n"); } return 0; } 

我无法做的是在特定的时间安排示例function。 我想在9.01第一次调用样本函数9.05第二次9.10第三次9.15 …… 9.20 ……等等直到17.30 17.30之后进程应该终止。

最好的问候马西莫

你应该使用一个线程在特定的时间之后调用你想要的函数。
做这样的事情:

 #include <pthread.h> #include <unistd.h> // for sleep() and usleep() void *thread(void *arg) { // arguments not used in this case sleep(9); // wait 9 seconds usleep(10000) // wait 10000 microseconds (1000000s are 1 second) // thread has sleeped for 9.01 seconds function(); // call your function // add more here return NULL; } int main() { pthread_t pt; pthread_create(&pt, NULL, thread, NULL); // thread is running and will call function() after 9.01 seconds } 

还有一种方法可以编写线程函数(通过检查程序运行的时间):

 void *thread(void *arg) { while ((clock() / (double)CLOCKS_PER_SEC) < 9.01) // check the running time while it's less than 9.01 seconds ; function(); // etc... return NULL; } 

记住:你必须链接pthread库! 如果你使用gcc,这将是-lpthread

有关pthreads(POSIX线程)的更多信息,您可以查看本网站:
https://computing.llnl.gov/tutorials/pthreads/
而在时钟功能上:
http://www.cplusplus.com/reference/clibrary/ctime/clock/

在完成处理之后(即在printf之后),需要计算延迟,因为处理需要时间。 您可以在17:30或更晚时间结束循环。

如果你不减少延迟,那么你不会在一天中的正确时间得到样本。