Простое многопоточное приложение Windows CE - планирование потоков - PullRequest
0 голосов
/ 13 декабря 2011

Я создал простое приложение для Windows CE 5.0 в качестве упражнения для многопоточной работы. В WinMain я дважды вызываю функцию для создания потоков:

 myThread = CreateThread(NULL, 0, myThreadFunc(), NULL, 0, NULL);
 myThread2 = CreateThread(NULL, 0, myThreadFunc2(), NULL, 0, NULL);

И функции, выполняемые в потоках, выглядят так:

LPTHREAD_START_ROUTINE myThreadFunc()
{
    Sleep(3000);
    MessageBox(NULL, _T("thread 1"), _T("thread 1"), MB_OK);
    return 0;
}

LPTHREAD_START_ROUTINE myThreadFunc2()
{
    Sleep(2000);
    MessageBox(NULL, _T("thread 2"), _T("thread 2"), MB_OK);
    return 0;
}

Я ожидал, что программа показывает диалоговое окно из потока 2 через 2 секунды, а через 1 секунду показывает диалоговое окно из потока 1. Но на самом деле, когда я запускаю эту программу, оно показывает первое диалоговое окно из потока 1 через 2 секунды. а затем диалоговое окно из потока 2 через 3 секунды. Кажется, что эти ступени работают последовательно, а не одновременно, как я ожидал. Кто-нибудь может объяснить мне это поведение, пожалуйста?

Я использую Windows CE 5.0, Windows eMbedded Visual C ++ и эмулятор для Windows CE STANDARDSDK_500.

Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 14 декабря 2011

Редактировать: Правильный ответ в комментариях.

Спасибо за ваши усилия.Я только что понял, у меня неправильный вызов функции createThread ().Вместо:

myThread = CreateThread(NULL, 0, myThreadFunc(), NULL, 0, NULL);

Я должен набрать:

myThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&myThreadFunc, NULL, 0, NULL);
...