我正在使用以下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之后,该过程应该终止。
祝你好运 马西莫
答案 0 :(得分:2)
您应该使用线程在特定时间后调用所需的功能 做这样的事情:
#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/
答案 1 :(得分:0)
完成处理后(即在printf
之后),您需要计算延迟,因为处理需要时间。您也可以在17:30或更晚的时候结束循环。
如果您没有减少延迟,那么您不会在一天中的正确时间获得样品。