有一个链表,链表里每个节点的数据是当作参数传入要调用的函数里。每次循环,函数执行时间超过三秒就返回,到下一个节点执行。三个函数都是使用if语句来判断时间。
线程通过循环来遍历链表,当链表里只有一个节点时,函数里的if判断就可以执行。
但是有两个以上的节点时,只有第一个节点的if语句可以被执行,后面的都被忽略了,但是时间还是对的。
若第一个节点被撤销,下一个节点的if语句就可以执行了。
这是为什么呢555救救孩子实在是不懂
//线程调用的函数1,函数1在类中
void MyDialog::process_a(int i, int a, int PID)
{
//开始计时
clock_t time_begin = clock();
for (i; i < 10; i++) {
//时间
clock_t time_end = clock();
如果时间差>3000,保存数据后退出
if (ROUND(time_end - time_begin)>3000) {
return; //程序结束
}
}
}
a += 10;
Sleep(1000);
}
//程序已运行完毕,从链表中删除
if (i == 10) {
DeleteProcess(PID);
}
}
//线程调用的函数2,同理于函数1
void MyDialog::process_a(int i, int b, int PID)
{
//开始计时
clock_t time_begin = clock();
for (i; i < 10; i++) {
//时间
clock_t time_end = clock();
如果时间差>3000,保存数据后退出
if (ROUND(time_end - time_begin)>3000) {
return; //程序结束
}
}
}
b += 22;
Sleep(1000);
}
//程序已运行完毕,从链表中删除
if (i == 10) {
DeleteProcess(PID);
}
}
//线程函数
DWORD WINAPI Dispatchy_RR(LPVOID *arg)
{
//传入对话框类的指针
MyDialog *dialog = (MyDialog*)arg;
CPCB *pCurrent = NULL;
//当前指针指向链表头节点
pCurrent = dialog->phead;
//当节点不为0时
while (dialog->nPCB > 0) {
WaitForSingleObject(semp, INFINITE);
int index = pCurrent->process_mark;
int i = pCurrent->i;
int a = pCurrent->a;
int PID = pCurrent->PID;
//选择函数执行
switch (index) {
case 1:
dialog->process_a(i, a, PID);
break;
case 2:
dialog->process_b(i, a, PID);
break;
}
ReleaseSemaphore(semp, 1, NULL);
//下一个节点
pCurrent = pCurrent->next;
}
return 0;
}