我在程序里有这么一个循环语句:for(int i=0;i<1000;i++)
{
   myFun();                //myFun()是for循环中调用的一个方法,有可能处理时间很长}因为myFun函数处理时间有可能会很长,所以我想做个判断,如果myFun执行时间超过半小时则中止当前的循环进入下一个循环(即中止当前的myFun,令i=i+1).想请教高手如何实现,谢谢~

解决方案 »

  1.   

    只能在myFun中判断了,然后for循环中根据返回值判断是不是要continue。
    要么就把myFun做成个线程,就可以在for循环中计算时间来控制了
      

  2.   

    如果执行时间很长的话最好放在线程中执行...你可以在myFun函数里判断一下用了多少时间,如果超过半个小时就返回..
      

  3.   

    我是新手,线程这一块不懂,没接触过,能给个简单的例子看一下吗?
    谢谢~
    本来是想用SetTimer来做的...
      

  4.   

    HANDLE event = CreateEvent(NULL, FALSE, FALSE, NULL); // 建立一个eventfor (int i = 0; i < 1000; i++) {
      HANDLE thread = CreateThread(...);  // 建立一个线程来跑你的 MyFun
      if (WaitForSingleObject(thread, 30000) == WAIT_TIMEOUT) {
        // 等待超时(30秒)
        SetEvent(event);  // 设定关闭事件
      }
      CloseHandle(thread);
    }然后线程里面注意检查 event 的状态吧。。
      

  5.   

    给你个例子,自己改改
    #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;
    }
      

  6.   

    TO:vrace
    先谢谢了~我刚开始学,麻烦了...
    CreateThread中有个参数应该是myFun函数名吧?
    应该是在myFun里判断event状态吗?应该如何判断? 
      

  7.   

    谢谢vrace了,我先看看你上面的代码,谢谢~~
      

  8.   

    TO:vrace 
    那么我的函数myFun应该是放在MyFunThread这个里头进行处理了?但是不知道具体放在哪个地方?是while函数里吗?......
      

  9.   

    thread = CreateThread(NULL, 0, MyFun, &data, 0, NULL);
    在MyFun中干你自己的事情就可以了
      

  10.   

    en, 代码是应该放在 MyFunThread 里面进行,但是要注意检查 event 的状态