用VC6写的,一个工作者线程在PutFile()时阻塞了,不能继续下去,有什么方法可以结束这个线程呀

解决方案 »

  1.   

    PutFile是一个阻塞操作,不能被控制,应该使用FtpOpenFile/InternetWriteFile来操作,这是循环操作,中间可以检测线程控制信号以方便退出
      

  2.   

    putfile不行 阻塞要想中止线程 直接中止就行了
      

  3.   

    怎样中止呢?用TerminateThread之类的不行
    FtpOpenFile/InternetWriteFile是怎么用的,如果服务器上没目标文件,怎么上传呢?
      

  4.   

    不要使用TerminateThread来终止线程,应该由主线程来设置一个事件为信号状态,上传线程通过WaitFor...检测该事件的信号状态来判断是否退出。
    主线程:
    // HANDLE hStopEvent = CreateEvent(...);
    // HANDLE hThread = CreateThread(...);
    SetEvent(hStopEvent); // 设置信号状态
    WaitForSingleObject(hThread, INFINITE); // 等待线程退出上传线程:
    while (TRUE)
    {
      if (WAIT_OBJECT_0 == WaitForSingleObject(hStopEvent, 1)) // 检测事件信号状态
        break;  ... // 执行上传操作,每次只上传一部分(比如512字节)
    }
      

  5.   

    请问如何  每次只上传一部分
    是不是要用FtpOpenFile/InternetWriteFile,请问是怎样用的,能提供例子给我吗?
    用putfile可不可做到呢
      

  6.   

    PutFile是一次性传完整个文件,中间得不到机会检测事件信号,所以被阻塞而无法及时退出。
    一次上传一部分是依靠InternetWriteFile来完成的,它的参数中会指明传递多少字节的数据出去,下一次循环传递下一部分数据
      

  7.   

    能不能给我个例程呀,我没用过FtpOpenFile/InternetWriteFile,拜托啦,加加加加加加加加分
      

  8.   

    谁能帮帮忙呀   FtpOpenFile/InternetWriteFile
      

  9.   

    FtpOpenFile好像只对HTTP有用吧。楼主好好看下msdn的FTP api。