Построение объекта в статической функции внутри DLL создает зависание во время выполнения

         //main
Scheduler::start(0, 2, emptyTask, true, false);

Это заголовочный файл для функции со статической функцией, называемой start ()

        //scheduler.h
namespace fbr{
static FiberPool *fiberPool;
...

class Scheduler{
public:
static void start(const unsigned int FIBER_COUNT,
const unsigned int THREAD_COUNT,BaseTask* startingTask, bool
fibersAreDynamic, bool enableSleeping);
};
...

}

Это файл класса, и код перестает печататься, когда я пытаюсь инициализировать статический указатель FiberPool. Код зависает и не выполняет конструктор. (con_cout — это пользовательская версия std :: cout)

//scheduler.cpp
void Scheduler::start(const unsigned int FIBER_COUNT, const unsigned int THREAD_COUNT,BaseTask* startingTask, bool fiberAreDynamic, bool enableSleeping){
...
con_cout << "scheduler before fbrpool!!" << fbr::endl; //this prints out

//construct FiberPool and its fibers
//if dynamic make sure there is at least 1 fiber per worker
if (useDynamicFibers && FIBER_COUNT < THREAD_COUNT){
con_cout << "before new fbrpool 1" << fbr::endl; //this prints out
fiberPool = new FiberPool(THREAD_COUNT); //code stops here for some reason when creating a new FiberPool within start (a static function)
}

...
}

Это FiberPool

namespace fbr{
public:
//constructor apparently is never called
FiberPool::FiberPool(const unsigned int FIBER_COUNT){
fbr::con_cout << "fiberpool!!" << fbr::endl;
for (unsigned int i = 0; i < FIBER_COUNT; i++)
fibers.push_back(new Fiber(i));
}

...

private:
//list of all the fibers available
con_vector<Fiber *> fibers;
}

Это вывод:

//output
scheduler before fbrpool!!
before new fbrpool 1

Использование Visual Studio 2013 в окне 7. Это прекрасно компилируется и выполняется, если весь код находится в одном проекте. Но когда у меня есть отдельные проекты, это проблема. Вызов Scheduler :: start (..) из моего main во втором проекте создает проблему компиляции, а затем останавливает выполнение.

Я не получаю сообщений об ошибках с отладчиком, и Windows не пытается завершить процесс. Мой процессор в ядре 1 всегда работает с максимальной нагрузкой, и на данный момент в программе есть только 1 поток (основной поток).

Я пробовал как статические, так и динамические ссылки, но ни одна из них не работала. При динамическом связывании я установил компоновщик и использовал Dynamic __declspec (dllexport). У меня есть ссылки и дополнительные каталоги включения тоже. Весь другой код в моей так называемой «библиотеке» работает, кроме этого. Просто чтобы заметить, я не использовал ключевое слово друг.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]