//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). У меня есть ссылки и дополнительные каталоги включения тоже. Весь другой код в моей так называемой «библиотеке» работает, кроме этого. Просто чтобы заметить, я не использовал ключевое слово друг.
Задача ещё не решена.
Других решений пока нет …