- 论坛徽章:
- 0
|
A机器(windows) B机器(Linux)
A机器运行着一款GUI界面windows版的通讯软件,我在B机器上用GTK开发功能和它一样的Linux版本。
该软件在发生文件传送的时候产生一个新的线程,windows用户可以在传送文件中途时取消。用posix多线程编写实现如下:
- res = pthread_create(&id_sendfiles, NULL, sendfiles, (void *)data);
- if (res != 0) {
- perror("Create thread failed!\n");
- exit(1);
- }
复制代码
在sendfiles线程代码中设置该线程的状态为接收到cancel信号后取消本线程
- pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
- pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
复制代码
当windows用户选择“取消文件传送”时杀死线程:
- if (pthread_cancel(id_sendfiles) != 0) {
- perror("pthread_cancel");
- }
复制代码
考虑到GTK在同一时刻只能有一个线程操作图形数据,为了线程安全,我想将上述功能用GTK||GDK的多线程来实现,从DevHelp里查找了g_thread*系列函数,只找到了g_thread_exit(),g_thread_join()两个函数可能和杀死线程相关,GTK||GDK里怎么才能实现类似posix多线程的pthread_cancel? |
|