Как небольшое изменение в коде, который никогда не выполняется, может иметь значение?

У меня очень странная проблема, и, поскольку я не могу отправить код, я постараюсь объяснить.

Это больше похоже на философскую проблему - надеюсь, у кого-то есть время / знания, чтобы подумать над этим.

1) У меня есть project.cpp, который выглядит примерно так:

#include <pthread.h>
#include <unistd.h>
pthread_t pplayer_thread;
void *play(void*);

int main(int argc, char **argv) {
    pthread_create(&pplayer_thread, NULL, play_cb, NULL);
    usleep(5000000);
    return 0;
}

2) pplayer.cpp выглядит примерно так:

...
void *play_cb(void *arg) {
    // this starts movie using gstreamer and exits thread
}   
...

3) not_exehibited _from_main.cpp выглядит примерно так:

...
extern MyClass *myObj; // this is included from .h file
...
MyClass *myObj = NULL;
...
some_function() {
    ...
    myObj = MyClass::createNew(args);
    ...
}
...

Все это связано с различными другими библиотеками и кучей мусора, но в основном это то, что важно.

-> Проблема :

Когда я запускаю это, я должен увидеть окно, в котором проигрывается фрагмент ролика с использованием gstreamer в течение 5 секунд -> НО я слышу только звук!

-> Странная вещь :

Когда я комментирую строку:

myObj = MyClass::createNew(args);

и снова запускаю -> я также вижу окно gstreamer (все в порядке)

-> Примечания :

это может иметь какое-то отношение к:

  • процессу связывания и природе MyClass и его родительскому классу (мое лучшее предположение)
  • «статический "ключевое слово
  • " внешнее "ключевое слово
  • Смешивание C и C ++

-> Я еще раз спрашиваю :

Как небольшое изменение в коде, который никогда не выполняется, может разница?

(помогите пожалуйста)

7
задан kliketa 25 January 2012 в 23:13
поделиться