Если пользователь повторит все действия не выходя из программы, то функция потока не выполняется - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вот тут я создаю поток в режиме ожидания (флаг CREATE_SUSPENDED):
HANDLE MainThread;
MainThread = CreateThread(NULL, 0, MainThreadFunction, &countNodes, CREATE_SUSPENDED, &threadID);
После определенных действий пользователя у меня запускается поток:
ResumeThread(MainThread);
Вот сама функция потока:
DWORD WINAPI MainThreadFunction(LPVOID lpParam) {
printf("First thread start.\n");
/* тут какие-то действия */
printf("First thread end.\n");
return 0;
}
Поток отрабатывает как надо. Однако если пользователь повторит все эти действия не выходя из программы, то функция потока попросту не выполняется. Как быть?

Решение задачи: «Если пользователь повторит все действия не выходя из программы, то функция потока не выполняется»

textual
Листинг программы
DWORD r;
ResumeThread(MainThread);
r = GetLastError();

Объяснение кода листинга программы

  1. В начале кода объявляется переменная типа DWORD с именем r. DWORD - это тип данных, который обычно используется для хранения целых чисел с плавающей точкой, и он может содержать значения от 0 до 4294967295.
  2. Затем вызывается функция ResumeThread(MainThread), где MainThread - это идентификатор потока, который нужно возобновить. Эта функция ожидает, что ей передадут дескриптор потока, и она будет использовать его для возобновления выполнения этого потока.
  3. После вызова функции ResumeThread в переменной r сохраняется результат ее работы. Результатом будет идентификатор успешно возобновленного потока или дескриптор, если возобновление не удалось.
  4. Затем вызывается функция GetLastError(), которая возвращает последний код ошибки, произошедший в системе. Этот код затем сохраняется в переменной r. Таким образом, в данном коде сначала происходит попытка возобновить выполнение потока с идентификатором MainThread, а затем проверяется, была ли эта попытка успешной, путем проверки значения переменной r, которая после вызова функции ResumeThread должна содержать идентификатор успешно возобновленного потока. Если попытка возобновления не удалась, то в переменной r будет содержаться код ошибки, который можно получить, вызвав функцию GetLastError().

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы