2016-04-17 5 views
0

Совет по всему Интернету для многопоточных приложений Win32 - по крайней мере, для MS Visual Studio - вам нужно связываться с многопотоковой библиотекой времени C вместо однопоточной (поэтому LIBCMT.LIB или LIBCPMT.LIB вместо LIBC.LIB или LIBCP.LIB). В настоящее время я использую Code :: Blocks с компилятором GCC, и я не уверен, что приведенный выше совет применим, или как изменить эти параметры ссылок, если это так. Я не могу найти ни один из вышеуказанных файлов, перечисленных в любом месте настроек сборки в среде IDE. Если я вызываю функцию «_beginthread» в простой тестовой программе, она, похоже, компилируется и запускается без каких-либо проблем, но я не уверен, что это доказывает. Я могу вызвать функцию «printf» из нового потока, и выход появится в главном окне консоли. Я не знаю, правильное ли это поведение или нет.Связывание многопоточных проверок времени для GCC в Code :: Blocks IDE

Любая помощь будет высоко оценена.

EDIT:

Спасибо, Тим за ваш ответ. Я не знаю, где найти флаги компилятора в этой среде IDE - это часть проблемы. Другая часть - я не знаю, что изменить, когда я их найду. Но вот моя простая тестовая программа - Я надеюсь, что это полезно:

#include <windows.h> 
#include <process.h> 
#include <stdio.h> 

HANDLE ThreadHandle; 

void RunThreadFunc(void *This) { 
    printf("%s", "Squeak.\n\n"); 
    _endthread(); 
} 

int main() { 
    Sleep(2000); 

    ThreadHandle = (HANDLE) _beginthread(RunThreadFunc, 0, NULL); 

    //printf("%s", "Woo.\n\n"); 

    Sleep(2000); 

    return 0; 
} 
+0

Не могли бы вы разместить свой код вместе со своими текущими флагами компилятора? – Tim

ответ

2

Версия GCC поставляется с Code :: Blocks является TDM-GCC. Эта версия GCC использует библиотеку времени исполнения MinGW C, которая почти полностью построена на DLL-версии многопотоковой C-среды Visual Studio 6, MSVCRT.DLL. (Обратите внимание, что MSVCRT.DLL теперь считается частью операционной системы Windows.) Нет версии статической библиотеки среды исполнения MinGW, будь то многопотоковая или нет, поэтому нет эквивалента ни LIBCMT.LIB, ни LIBC.LIB. Это эквивалентно связыванию с MSVCRT.LIB.

С другой стороны, GCC использует собственную библиотеку времени выполнения C++. Релиз TDM-GCC предоставляет две версии: статическую многопоточную версию и многопоточную версию DLL.

Так что совет, который вы слышали об использовании многопоточных библиотек времени исполнения с Visual Studio, не применяется. У вас нет выбора, ваши проекты, скомпилированные GCC, всегда будут связаны с многопоточным временем автономной работы. (Обратите внимание, что это также верно для современных версий Visual Studio, они отказались от поддержки однопоточных исполнений с Visual Studio 2005.)

+0

Большое спасибо, это очень полезно! Кстати, можете ли вы предложить какие-либо ссылки на поддержку этого ответа, пожалуйста? – Entropy

+0

@ Энтропия Ни для кого не является авторитетной для значительных претензий. Вы можете убедиться, что любое созданное вами приложение связано с MSVCRT.DLL, но вам нужно будет обратиться к копии документации Visual Studio 6, не находясь в Интернете, чтобы найти официальное заявление о том, что это многопоточный CRT. Документация TDM-GCC почти не существует, и, хотя она упоминает, что она предоставляет две версии C++ RT, и она упоминает потоки, она не совсем говорит, что две версии C++ RT являются многопоточными: http : //tdm-gcc.tdragon.net/quirks –

+0

К сожалению, я не знаю, как проверить, с чем связаны мои приложения в этой среде IDE - вот почему я разместил этот вопрос после многих часов поиска. По вашему определению, я должен предположить, что вы тоже не являетесь авторитетом по этому вопросу, хотя вы, кажется, знаете, о чем говорите. Я думаю, было бы полезно иметь ссылки на другие источники, которые также, похоже, знают, о чем они говорят, даже если они не являются строго авторитетными. Благодарю. – Entropy

 Смежные вопросы

  • Нет связанных вопросов^_^