【发布时间】:2018-07-20 21:06:53
【问题描述】:
首先,我回顾了示例test/threads.cxx;但这并不是我正在寻找的用例,因为示例线程函数可以访问 FLTK 函数。
我有一个 libssh2 库函数(我写的,但希望它不依赖于 FLTK),具有以下函数头:
int sshSendFile(const char * loclfile, const char * scppath, char * 字节上传)
我希望它在线程中运行,在线程中,FLTK 旋转并读取值 bytesupload 并更新 Fl_Progress 上的标签,当然 sshSendFile 在上传时会更新。
实际上,这就是我目前所拥有的;一旦 sshSendFile 完成,我的程序就会在 Debug 中退出!
Fl::lock();
char * string_target;
string_target = (char *)malloc(128);
void * next_message;
(Fl_Thread)_beginthread((void(__cdecl *)(void *))sshSendFile("C:/randomfile.txt", "/tmp/testing, string_target), 0,NULL);
while (Fl::wait() > 0) {
if ((next_message = Fl::thread_message()) != NULL) {
this->progress_bar->label(string_target);
this->redraw();
Fl::check();
}
}
Fl::unlock();
在Fl:wait() 处设置断点永远不会被命中。我在调试这个时遇到了一些麻烦,并且发现文档不太清楚。任何帮助表示赞赏!
【问题讨论】:
-
你做这一切的方式非常错误。
_beginthread需要函数的地址,但您正在传递一些不相关的值,该值被转换为指向函数的指针。这将导致访问冲突错误,之后将无济于事。 -
C 风格转换是引入错误的好方法。