none
请问XPE是否对线程数有限制? RRS feed

  • 问题

  • 我们自己开发的应用,每个进程都要创建10个以上的线程,当线程数量超过一定值后,createthread就会返回错误。请教各位高手了,谢谢!
    2009年2月17日 2:14

答案

  • 是否以下原因,仅供参考:
    微软在XP sp2中对单个进程同时发起的连接尝试做了限制,最多10个,运行netstat -no看看.
    可以下载个"迅雷"等下载工具,安装的时候,程序就会让你破解此限制.
    ***声明***:以上建议技术上可行,但软件授权上应该不合法.
    http://wince.cn/ or http://windowsce.com.cn/
    • 已标记为答案 coolmap 2009年2月18日 2:38
    • 取消答案标记 coolmap 2009年2月18日 2:57
    • 已标记为答案 KeFang Chen 2009年2月23日 2:00
    2009年2月18日 2:17
    版主

全部回复

  • 请问你的程序在XP下正常吗?
    如果只是XP E系统下的问题我们再继续讨论 如果在XP下都不正常 那么呵呵就应该看看你们的程序了!
    一般XP E和XP一样 支持多线程的 而且你说了 超过一定值才出错 你应该再看看!
    2009年2月17日 4:00
    版主
  • XP下是正常的。
    2009年2月17日 4:15
  • 请LZ把具体错误码贴上.
    XPE一般不用硬盘虚存,看看是否内存不足了?
    http://wince.cn/ or http://windowsce.com.cn/
    2009年2月17日 6:42
    版主
  • 用GetLastError()得到错误码为:1445。

    程序中涉及线程操作的主要是以下几个函数:

    1.创建线程函数(在程序启动时,最多情况下会创建76个线程):
    pResCtrl->decoder[i].hThreadHandle = (HANDLE)_beginthreadex(NULL, 0x300000, dec_Main,
                                                                                          (void*)&pResCtrl->decoder[i], CREATE_SUSPENDED, 
                                                                                           &pResCtrl->decoder[i].nThreadId);

    2.线程主函数(在线程一开始的时候会创建一个UDP接收Socket):
    unsigned int __stdcall dec_Main(void* pParam)
    {
    WSADATA       wsd;
        struct sockaddr_in local;
    char recvbuf[DEFAULT_RTP_BUFFER_LEN];
    //sDWORD dwLength = DEFAULT_RTP_BUFFER_LEN;
    //DWORD fionbio = 0;
    DECODER* pDecoder = (DECODER*)pParam;
    memset(recvbuf,0,sizeof(recvbuf));
    if(!pDecoder) return 0;
        if (WSAStartup(MAKEWORD(1,1), &wsd) != 0)
        {
            return -1;
        }
    // Create the socket and bind it to a local interface and port
        //
        pDecoder->sock = socket(AF_INET, SOCK_DGRAM, 0);
        if (pDecoder->sock == INVALID_SOCKET)
        {
            return -1;
        }
        local.sin_family = AF_INET;
        local.sin_port = htons(pDecoder->nPort);
    local.sin_addr.s_addr = htonl(INADDR_ANY);
    if (bind(pDecoder->sock, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR)
      {
        return -1;
       }
    pDecoder->bThreadExit = 0;
    while(!pDecoder->bThreadExit)
    {
    struct sockaddr_in sender;
    int          dwSenderSize;
    int ret = 0;
    dwSenderSize = sizeof(struct sockaddr);
    ret = recvfrom(pDecoder->sock, recvbuf, sizeof(recvbuf), 0, 
                    (SOCKADDR *)&sender, &dwSenderSize);
            if (ret == SOCKET_ERROR)
            {
    int err = WSAGetLastError();
    //Sleep(1);
            }
            else if (ret == 0)
    {
    }
    else
    {
    //......
    }
    }
     closesocket(pDecoder->sock);
     WSACleanup();
     return 0;

    2009年2月17日 8:07
  • 是否以下原因,仅供参考:
    微软在XP sp2中对单个进程同时发起的连接尝试做了限制,最多10个,运行netstat -no看看.
    可以下载个"迅雷"等下载工具,安装的时候,程序就会让你破解此限制.
    ***声明***:以上建议技术上可行,但软件授权上应该不合法.
    http://wince.cn/ or http://windowsce.com.cn/
    • 已标记为答案 coolmap 2009年2月18日 2:38
    • 取消答案标记 coolmap 2009年2月18日 2:57
    • 已标记为答案 KeFang Chen 2009年2月23日 2:00
    2009年2月18日 2:17
    版主
  • 多谢……,不过我们在一台没有安装任何下载工具的计算机上试,也没有问题,就是在XPE下不行,估计是少了什么组件
    • 已标记为答案 coolmap 2009年2月18日 2:38
    • 取消答案标记 coolmap 2009年2月18日 2:38
    2009年2月18日 2:37
  •  在XPE上,安装"迅雷"等下载工具,安装的时候,破解此限制.试过啦?

    http://wince.cn/ or http://windowsce.com.cn/
    2009年2月18日 11:57
    版主