C ++ WIN32: краткий пример многозадачности - PullRequest
0 голосов
/ 21 апреля 2010

Я искал примеры того, как создать простое многопоточное приложение, которое делает что-то похожее на это:

#include <iostream>
using namespace std;
int myConcurrentFunction( )
{
    while( 1 )
    {
         cout << "b" << endl;
    }
}
int main( )
{
    // Start a new thread for myConcurrentFunction
    while( 1 )
    {
         cout << "a" << endl;
    }
}
  • Как я могу получить вышеприведенный вывод a и b "случайным образом", запустив новый поток вместо обычного вызова myConcurrentFunction?

Я имею в виду: каков минимальный код для этого? Это действительно одна функция, которую я должен вызвать? Какие файлы мне нужно включить?

Я использую MSVC 2010, Win32

Ответы [ 3 ]

3 голосов
/ 21 апреля 2010

Самый простой - _beginthread . Просто сфокусируйтесь на том, как они создают поток в своем примере, это не так сложно, как кажется на первый взгляд.

#include <iostream>
#include <process.h>

using namespace std;
void myConcurrentFunction(void *dummy)
{
    while( 1 )
    {
         cout << "b" << endl;
    }
}

int main( )
{
    _beginthread(myConcurrentFunction, 0, NULL);
    while( 1 )
    {
         cout << "a" << endl;
    }
}
1 голос
/ 21 апреля 2010

Это сложнее, чем это.Например, функция потока должна возвращать DWORD и принимать параметры LPVOID.

Посмотрите код из MSDN для более подробной информации.

0 голосов
/ 21 апреля 2010

Кстати, зачем резать, когда вам просто нужно случайное разбрызгивание 'a' & 'b'.

int randomSprinkling () { char val [2] = {'a', 'b'};

int i = 0;
while( ++i < 100  ) 
{
    std::cout << val[rand()%2] << std::endl; 
} 
return 0;

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...