Странное поведение CreateThread.

Тема в разделе "WASM.WIN32", создана пользователем CrawlUp, 10 дек 2018.

  1. Smit

    Smit New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2018
    Сообщения:
    11
    Код (C):
    1. CreateThread(NULL, 10000, (LPTHREAD_START_ROUTINE)Thread_SyncDATA, (VOID*)&list_process, 0, &ThreadID);
    заменить на
    Код (C):
    1. CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)Thread_SyncDATA, (VOID*)&list_process, 0, &ThreadID);
     
  2. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Smit, и как оно влияет?
     
  3. Smit

    Smit New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2018
    Сообщения:
    11
    M0rg0t,
    ТС говорит, что GetLastError возвращает "Недостаточно памяти для обработки команды". К гадалке не ходи, это из за того, что он явно указывает размер стека при создании потока. Лучше указать по умолчанию.
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Smit,

    Учитывая что сервисных ошибок сопоставляется лишь несолько:
    То можно элементарно догадаться что проблема вторая, такой статус возвращается при не корректных параметрах при запросе на выделение памяти.

    superakira,

    > как работать с асинхронным апи, где и как чекать пендинг статусы в юм?

    Сам догадайся.
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    да не парься, Инде не шарит просто, ему матчасть надо идти учить...
     
  6. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Тема тут вижу кипит. Вообщем-то я вроде разобрался в чём причина. Если у тебя перед функцией main объявляется много глобального "чего-то там", при инициализации окна, если в отладчике показывается только один основной поток, то функция CreateThread провальна, и сколько бы ты её не запускал в цикле, с любыми значениями она не заработает. Но если, кроме основного потока уже успели заработать ещё 3 "рабочих потока" , функция вызывается успешно. Я в функции main добавил задержку 3 секунды перед созданием окна, и вызов CreateThread происходит уже с инициализированными "1- основным потоком, и 3- рабочими потоками". Проходит естественно успешно.
     
    Mikl___ и q2e74 нравится это.