Как создать потоки в VC ++

Один из способов сделать это

data have;
input  Time  Group  Event $ Value  ;
datalines;
1      1   NA          0 
2      1   NA          0 
3      1   Begin     1.1 
4      1   NA        1.2 
5      1   NA        1.3 
6      1   End       1.4 
7      1   NA          0 
1      2   NA          0 
2      2   Begin     1.1 
3       2  NA        1.2 
4       2  End       1.3 
5       2  NA        1.4 
;


 data have2(keep= Group min_var max_var);
    set have;
   by group;
   retain min_var max_var;
     if trim(Event)= "Begin" then min_var =_n_ ;
       if trim(Event)= "End" then max_var =_n_;
      if last.group;
       run;

       data want;
          merge have have2;
       by group;
       if _n_  ge min_var and _n_  le max_var ;
         drop min_var max_var;
        run;
8
задан Aaron 2 February 2009 в 22:59
поделиться

7 ответов

Вы не должны использовать необработанный Win32 CreateThread() API.

Используйте время выполнения C _beginthreadex() таким образом, время выполнения имеет возможность настроить ее собственную поддержку потока.

3
ответ дан 5 December 2019 в 08:26
поделиться

Можно использовать любого функция CRT _beginthreadex () или Windows API function CreateThread (). _beginthreadex () требуется для ранних версий VC ++, который имел CRT, который лениво не инициализировал локальную память потока. CreateThread () прекрасен, по крайней мере, в VS2005 и.

3
ответ дан 5 December 2019 в 08:26
поделиться

при поиске платформенно независимого метода используйте повышение

существует также beginthread () и beginthreadex () функции. Оба, кажется, дополнительны к Win32 API, в некотором смысле что во многих вариантах использования, все еще необходимо вызвать некоторые функции Win32 (такие как CloseHandle для beginthreadex). Так, если Вы не заботитесь так очень о совместимости платформ, Вы могли бы также сократить прелюдию и использовать CreateThread ().

Обработка потока Win32 документируется здесь: http://msdn.microsoft.com/en-us/library/ms684852 (По сравнению с 85) .aspx

[edit1] пример:

DWORD WINAPI MyThreadProc( void* pContext )
{
    return 0;
}

HANDLE h = CreateThread( NULL, 0, MyThreadProc, this, 0L, NULL );
WaitForSingleObject(h, TIME); // wait for thread to exit, TIME is a DWORD in milliseconds

[edit2] CRT & CreateThread ():

на MSDN:

Поток в исполняемом файле, который называет библиотеку времени выполнения C (CRT), должен использовать _beginthreadex и функции _endthreadex для управления потоком, а не CreateThread и ExitThread; это требует использования многопоточной версии CRT. Если поток, созданный с помощью CreateThread, называет CRT, CRT может завершить процесс в условиях низкой памяти.

10
ответ дан 5 December 2019 в 08:26
поделиться

Вы, вероятно, хотите смотреть на CreateThread () функция.

2
ответ дан 5 December 2019 в 08:26
поделиться

Использовать _beginthread() или _beginthreadex() создать новый поток. Не используйте функцию Win32 CreateThread() - это правильно не инициализирует многопоточные аспекты времени выполнения C. См. также этот вопрос.

1
ответ дан 5 December 2019 в 08:26
поделиться

Некоторые хорошие книги по предмету являются Windows Программирования Petzold и Приложениями Программирования Richter для Windows. В частности, последние движения в сторону сервера, программируя, такие как поток и синхронизация API в большой глубине.

Править: Для фрагментов кода Google является Вашим другом. Например, Эта статья имеет некоторые минимальные примеры потока.

1
ответ дан 5 December 2019 в 08:26
поделиться

Существует также _beginthread () функция, которую можно искать. Это отличается немного от CreateThread (), необходимо знать о различиях прежде, чем выбрать то.

0
ответ дан 5 December 2019 в 08:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: