我在程序里有这么一个循环语句:for(int i=0;i<1000;i++)
{
myFun(); //myFun()是for循环中调用的一个方法,有可能处理时间很长}因为myFun函数处理时间有可能会很长,所以我想做个判断,如果myFun执行时间超过半小时则中止当前的循环进入下一个循环(即中止当前的myFun,令i=i+1).想请教高手如何实现,谢谢~
{
myFun(); //myFun()是for循环中调用的一个方法,有可能处理时间很长}因为myFun函数处理时间有可能会很长,所以我想做个判断,如果myFun执行时间超过半小时则中止当前的循环进入下一个循环(即中止当前的myFun,令i=i+1).想请教高手如何实现,谢谢~
要么就把myFun做成个线程,就可以在for循环中计算时间来控制了
谢谢~
本来是想用SetTimer来做的...
HANDLE thread = CreateThread(...); // 建立一个线程来跑你的 MyFun
if (WaitForSingleObject(thread, 30000) == WAIT_TIMEOUT) {
// 等待超时(30秒)
SetEvent(event); // 设定关闭事件
}
CloseHandle(thread);
}然后线程里面注意检查 event 的状态吧。。
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>/* data to transfer to thread */
struct NumThreadData
{
HANDLE event;
int num;
};/* thread function */
DWORD WINAPI MyFunThread(LPVOID extra)
{
struct NumThreadData *ptr = (struct NumThreadData*)extra; if (!ptr) {
return 0;
} while (1) {
/* check event */
if (WaitForSingleObject(ptr->event, 0) == WAIT_OBJECT_0) {
break;
} printf("%d", ptr->num);
Sleep(200);
} return 0;
}int main(void)
{
HANDLE event;
HANDLE thread;
struct NumThreadData data;
int i; /* create event */
event = CreateEvent(NULL, FALSE, FALSE, NULL);
if (!event) {
printf("Can't create event.\n");
exit(EXIT_FAILURE);
} /* save event */
data.event = event; for (i = 0; i < 6; i++) {
/* save data */
data.num = i;
/* create thread & run */
thread = CreateThread(NULL, 0, MyFunThread, &data, 0, NULL);
if (!thread) {
printf("Can't create thread. %d\n", i);
} /* wait */
if (WaitForSingleObject(thread, 10000) == WAIT_TIMEOUT) {
/* i want to stop */
SetEvent(event);
/* wait for the thread to stop */
WaitForSingleObject(thread, INFINITE);
}
CloseHandle(thread); printf("\n");
} CloseHandle(event); return 0;
}
先谢谢了~我刚开始学,麻烦了...
CreateThread中有个参数应该是myFun函数名吧?
应该是在myFun里判断event状态吗?应该如何判断?
那么我的函数myFun应该是放在MyFunThread这个里头进行处理了?但是不知道具体放在哪个地方?是while函数里吗?......
在MyFun中干你自己的事情就可以了