gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:20:16 24 4
gpt4 key购买 nike

我正在使用以下 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;
}

我无法做的是在特定时间安排示例功能。我想调用示例函数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/

关于C语言在指定时间调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11653087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com